[Android开发] RecyleView+Checkbox 实现勾选条目删除简单功能 + 删除完后用图片占位

本文主要是介绍[Android开发] RecyleView+Checkbox 实现勾选条目删除简单功能 + 删除完后用图片占位,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 1. activity + adpter
  • 2. item.xml
  • 3. 占位
    • 3.1 xml
    • 3.2 activity

1. activity + adpter

package com.example.myapplication.view;import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.TextView;import com.example.myapplication.R;import java.util.ArrayList;
import java.util.List;public class ForthActivity extends AppCompatActivity {private RecyclerView recyclerView;private Button btnDelete;private MyAdapter adapter;private List<String> data = new ArrayList<>();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_forth);// 初始化数据for (int i = 1; i <= 5; i++) {data.add("Item " + i);}recyclerView = findViewById(R.id.recyclerView);btnDelete = findViewById(R.id.btnDelete);recyclerView.setLayoutManager(new LinearLayoutManager(this));adapter = new MyAdapter(data);recyclerView.setAdapter(adapter);btnDelete.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {adapter.deleteSelectedItems();}});}
// 核心private class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {private List<String> data;private List<Boolean> checkedItems;public MyAdapter(List<String> data) {this.data = data;this.checkedItems = new ArrayList<>(data.size());for (int i = 0; i < data.size(); i++) {checkedItems.add(false);}}@Overridepublic MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_layout, parent, false);return new MyViewHolder(view);}@Overridepublic void onBindViewHolder(MyViewHolder holder, int position) {holder.textView.setText(data.get(position));holder.checkbox.setChecked(checkedItems.get(position)); // 核心// 核心// 设置监听器前先移除当前的,否则会重复绑定holder.checkbox.setOnCheckedChangeListener(null);holder.checkbox.setOnCheckedChangeListener((buttonView, isChecked) -> {checkedItems.set(position, isChecked);});}@Overridepublic int getItemCount() {return data.size();}public void deleteSelectedItems() {for (int i = data.size() - 1; i >= 0; i--) {if (checkedItems.get(i)) {data.remove(i);checkedItems.remove(i);// 核心notifyItemRemoved(i); // 核心notifyDataSetChanged(); // 核心}}}class MyViewHolder extends RecyclerView.ViewHolder {CheckBox checkbox;TextView textView;MyViewHolder(View itemView) {super(itemView);checkbox = itemView.findViewById(R.id.checkbox);textView = itemView.findViewById(R.id.textView);}}}
}

2. item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><CheckBoxandroid:id="@+id/checkbox"android:layout_width="wrap_content"android:layout_height="wrap_content" /><TextViewandroid:id="@+id/textView"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginStart="16dp" /></LinearLayout>

3. 占位

3.1 xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"><Buttonandroid:id="@+id/btnDelete"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Delete Selected Items"android:layout_alignParentBottom="true"android:layout_centerHorizontal="true" /><androidx.recyclerview.widget.RecyclerViewandroid:id="@+id/recyclerView"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_above="@id/btnDelete" /><ImageViewandroid:id="@+id/placeholderImageView"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true"android:src="@drawable/ic_launcher_background"android:visibility="gone"/>
</RelativeLayout>

3.2 activity

package com.example.myapplication.view;import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.TextView;import com.example.myapplication.R;import java.util.ArrayList;
import java.util.List;public class ForthActivity extends AppCompatActivity {private RecyclerView recyclerView;private Button btnDelete;private MyAdapter adapter;private List<String> data = new ArrayList<>();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_forth);// 初始化数据for (int i = 1; i <= 5; i++) {data.add("Item " + i);}recyclerView = findViewById(R.id.recyclerView);btnDelete = findViewById(R.id.btnDelete);recyclerView.setLayoutManager(new LinearLayoutManager(this));adapter = new MyAdapter(data);recyclerView.setAdapter(adapter);ImageView placeholderImageView = findViewById(R.id.placeholderImageView);btnDelete.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {adapter.deleteSelectedItems();if (adapter.getItemCount() == 0) {recyclerView.setVisibility(View.GONE);placeholderImageView.setVisibility(View.VISIBLE);} else {recyclerView.setVisibility(View.VISIBLE);placeholderImageView.setVisibility(View.GONE);}}});}private class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {private List<String> data;private List<Boolean> checkedItems;public MyAdapter(List<String> data) {this.data = data;this.checkedItems = new ArrayList<>(data.size());for (int i = 0; i < data.size(); i++) {checkedItems.add(false);}}@Overridepublic MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_layout, parent, false);return new MyViewHolder(view);}@Overridepublic void onBindViewHolder(MyViewHolder holder, int position) {holder.textView.setText(data.get(position));holder.checkbox.setChecked(checkedItems.get(position));// 设置监听器前先移除当前的,否则会重复绑定holder.checkbox.setOnCheckedChangeListener(null);holder.checkbox.setOnCheckedChangeListener((buttonView, isChecked) -> {checkedItems.set(position, isChecked);});}@Overridepublic int getItemCount() {return data.size();}public void deleteSelectedItems() {for (int i = data.size() - 1; i >= 0; i--) {if (checkedItems.get(i)) {data.remove(i);checkedItems.remove(i);notifyItemRemoved(i);notifyDataSetChanged();}}}class MyViewHolder extends RecyclerView.ViewHolder {CheckBox checkbox;TextView textView;MyViewHolder(View itemView) {super(itemView);checkbox = itemView.findViewById(R.id.checkbox);textView = itemView.findViewById(R.id.textView);}}}
}

这篇关于[Android开发] RecyleView+Checkbox 实现勾选条目删除简单功能 + 删除完后用图片占位的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1117155

相关文章

Python对接支付宝支付之使用AliPay实现的详细操作指南

《Python对接支付宝支付之使用AliPay实现的详细操作指南》支付宝没有提供PythonSDK,但是强大的github就有提供python-alipay-sdk,封装里很多复杂操作,使用这个我们就... 目录一、引言二、准备工作2.1 支付宝开放平台入驻与应用创建2.2 密钥生成与配置2.3 安装ali

Spring Security 单点登录与自动登录机制的实现原理

《SpringSecurity单点登录与自动登录机制的实现原理》本文探讨SpringSecurity实现单点登录(SSO)与自动登录机制,涵盖JWT跨系统认证、RememberMe持久化Token... 目录一、核心概念解析1.1 单点登录(SSO)1.2 自动登录(Remember Me)二、代码分析三、

PyQt5 GUI 开发的基础知识

《PyQt5GUI开发的基础知识》Qt是一个跨平台的C++图形用户界面开发框架,支持GUI和非GUI程序开发,本文介绍了使用PyQt5进行界面开发的基础知识,包括创建简单窗口、常用控件、窗口属性设... 目录简介第一个PyQt程序最常用的三个功能模块控件QPushButton(按钮)控件QLable(纯文本

PyCharm中配置PyQt的实现步骤

《PyCharm中配置PyQt的实现步骤》PyCharm是JetBrains推出的一款强大的PythonIDE,结合PyQt可以进行pythion高效开发桌面GUI应用程序,本文就来介绍一下PyCha... 目录1. 安装China编程PyQt1.PyQt 核心组件2. 基础 PyQt 应用程序结构3. 使用 Q

Python实现批量提取BLF文件时间戳

《Python实现批量提取BLF文件时间戳》BLF(BinaryLoggingFormat)作为Vector公司推出的CAN总线数据记录格式,被广泛用于存储车辆通信数据,本文将使用Python轻松提取... 目录一、为什么需要批量处理 BLF 文件二、核心代码解析:从文件遍历到数据导出1. 环境准备与依赖库

linux下shell脚本启动jar包实现过程

《linux下shell脚本启动jar包实现过程》确保APP_NAME和LOG_FILE位于目录内,首次启动前需手动创建log文件夹,否则报错,此为个人经验,供参考,欢迎支持脚本之家... 目录linux下shell脚本启动jar包样例1样例2总结linux下shell脚本启动jar包样例1#!/bin

go动态限制并发数量的实现示例

《go动态限制并发数量的实现示例》本文主要介绍了Go并发控制方法,通过带缓冲通道和第三方库实现并发数量限制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录带有缓冲大小的通道使用第三方库其他控制并发的方法因为go从语言层面支持并发,所以面试百分百会问到

Go语言并发之通知退出机制的实现

《Go语言并发之通知退出机制的实现》本文主要介绍了Go语言并发之通知退出机制的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1、通知退出机制1.1 进程/main函数退出1.2 通过channel退出1.3 通过cont

Python实现PDF按页分割的技术指南

《Python实现PDF按页分割的技术指南》PDF文件处理是日常工作中的常见需求,特别是当我们需要将大型PDF文档拆分为多个部分时,下面我们就来看看如何使用Python创建一个灵活的PDF分割工具吧... 目录需求分析技术方案工具选择安装依赖完整代码实现使用说明基本用法示例命令输出示例技术亮点实际应用场景扩

java如何实现高并发场景下三级缓存的数据一致性

《java如何实现高并发场景下三级缓存的数据一致性》这篇文章主要为大家详细介绍了java如何实现高并发场景下三级缓存的数据一致性,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 下面代码是一个使用Java和Redisson实现的三级缓存服务,主要功能包括:1.缓存结构:本地缓存:使