[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

相关文章

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

Python基于wxPython和FFmpeg开发一个视频标签工具

《Python基于wxPython和FFmpeg开发一个视频标签工具》在当今数字媒体时代,视频内容的管理和标记变得越来越重要,无论是研究人员需要对实验视频进行时间点标记,还是个人用户希望对家庭视频进行... 目录引言1. 应用概述2. 技术栈分析2.1 核心库和模块2.2 wxpython作为GUI选择的优

使用Sentinel自定义返回和实现区分来源方式

《使用Sentinel自定义返回和实现区分来源方式》:本文主要介绍使用Sentinel自定义返回和实现区分来源方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Sentinel自定义返回和实现区分来源1. 自定义错误返回2. 实现区分来源总结Sentinel自定

Mysql表的简单操作(基本技能)

《Mysql表的简单操作(基本技能)》在数据库中,表的操作主要包括表的创建、查看、修改、删除等,了解如何操作这些表是数据库管理和开发的基本技能,本文给大家介绍Mysql表的简单操作,感兴趣的朋友一起看... 目录3.1 创建表 3.2 查看表结构3.3 修改表3.4 实践案例:修改表在数据库中,表的操作主要

macOS无效Launchpad图标轻松删除的4 种实用方法

《macOS无效Launchpad图标轻松删除的4种实用方法》mac中不在appstore上下载的应用经常在删除后它的图标还残留在launchpad中,并且长按图标也不会出现删除符号,下面解决这个问... 在 MACOS 上,Launchpad(也就是「启动台」)是一个便捷的 App 启动工具。但有时候,应

Java实现时间与字符串互相转换详解

《Java实现时间与字符串互相转换详解》这篇文章主要为大家详细介绍了Java中实现时间与字符串互相转换的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、日期格式化为字符串(一)使用预定义格式(二)自定义格式二、字符串解析为日期(一)解析ISO格式字符串(二)解析自定义

opencv图像处理之指纹验证的实现

《opencv图像处理之指纹验证的实现》本文主要介绍了opencv图像处理之指纹验证的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录一、简介二、具体案例实现1. 图像显示函数2. 指纹验证函数3. 主函数4、运行结果三、总结一、

SpringKafka消息发布之KafkaTemplate与事务支持功能

《SpringKafka消息发布之KafkaTemplate与事务支持功能》通过本文介绍的基本用法、序列化选项、事务支持、错误处理和性能优化技术,开发者可以构建高效可靠的Kafka消息发布系统,事务支... 目录引言一、KafkaTemplate基础二、消息序列化三、事务支持机制四、错误处理与重试五、性能优

SpringIntegration消息路由之Router的条件路由与过滤功能

《SpringIntegration消息路由之Router的条件路由与过滤功能》本文详细介绍了Router的基础概念、条件路由实现、基于消息头的路由、动态路由与路由表、消息过滤与选择性路由以及错误处理... 目录引言一、Router基础概念二、条件路由实现三、基于消息头的路由四、动态路由与路由表五、消息过滤

Springboot处理跨域的实现方式(附Demo)

《Springboot处理跨域的实现方式(附Demo)》:本文主要介绍Springboot处理跨域的实现方式(附Demo),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录Springboot处理跨域的方式1. 基本知识2. @CrossOrigin3. 全局跨域设置4.