RecyclerView使用,item实现全选,反选,单选,计算checkbox选中的个数
来源:互联网 发布:淘宝男模特收入 编辑:程序博客网 时间:2024/05/21 11:17
activity_main.xml 布局
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="CheckAll" android:text="全选" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="20dp" android:onClick="ReverseCheck" android:text="反选" /> <TextView android:id="@+id/checkNumber" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="20dp" android:text="选中 0 个" /> </LinearLayout> <android.support.v7.widget.RecyclerView android:id="@+id/recyclerview" android:layout_width="match_parent" android:layout_height="match_parent"> </android.support.v7.widget.RecyclerView></LinearLayout>
//MainActivity 方法中的代码
public class MainActivity extends AppCompatActivity { private RecyclerView recyclerview; private TextView checkNumber; private RecyclerAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); recyclerview = (RecyclerView) findViewById(R.id.recyclerview); checkNumber = (TextView) findViewById(R.id.checkNumber); LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); recyclerview.setLayoutManager(linearLayoutManager); adapter = new RecyclerAdapter(); recyclerview.setAdapter(adapter); //自定义接口,把选中的个数传过来 adapter.setOnCheckBoxClickListener(new RecyclerAdapter.OnCheckBoxClickListener() { @Override public void onClick(View view, int num) { checkNumber.setText("选中 " + num + " 个"); } }); } //全选按钮的点击事件 public void CheckAll(View view) { //调用自定义接口方法,设置全选 adapter.CheckedAllItem(); //调用自定义的方法,计算选中的个数,然后设置到TextView上面 int checkedNumber = adapter.getCheckedNumber(); checkNumber.setText("选中 " + checkedNumber + " 个"); } //反选按钮的点击事件 public void ReverseCheck(View view) { //调用自定义接口方法,设置反选 adapter.ReverseCheckItem(); //调用自定义的方法,计算选中的个数,然后设置到TextView上面 int checkedNumber = adapter.getCheckedNumber(); checkNumber.setText("选中 " + checkedNumber + " 个"); }}//RecyclerView适配器,完成全选,单选,和计算选中的个数,以及单选
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.MyViewHolder> { private HashMap<Integer, Boolean> map; private ArrayList<String> list; public RecyclerAdapter() { list = new ArrayList<>(); map = new HashMap<>(); for (int i = 0; i < 30; i++) { list.add("item" + i); map.put(i, false); } } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, parent, false); return new MyViewHolder(view); } @Override public void onBindViewHolder(final MyViewHolder holder, final int position) { holder.item_tv.setText(list.get(position)); holder.checkbox.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { map.put(position, !map.get(position));// CheckOleyOne(position); //点击的时候计算选中的个数 int checkedNumber = getCheckedNumber(); notifyDataSetChanged(); mOnCheckBoxClickListener.onClick(v, checkedNumber); } }); holder.checkbox.setChecked(map.get(position)); } private OnCheckBoxClickListener mOnCheckBoxClickListener; public interface OnCheckBoxClickListener { void onClick(View view, int num); } public void setOnCheckBoxClickListener(OnCheckBoxClickListener mOnCheckBoxClickListener) { this.mOnCheckBoxClickListener = mOnCheckBoxClickListener; } //得到选中的数量 public int getCheckedNumber() { int Number = 0; Set<Map.Entry<Integer, Boolean>> set = map.entrySet(); //判断是否有未选中的,如果有未选中isChecked = true;退出循环 for (Map.Entry<Integer, Boolean> entry : set) { if (entry.getValue() && Number <= list.size()) { Number += 1; } } return Number; } //全选方法 public void CheckedAllItem() { Set<Map.Entry<Integer, Boolean>> set = map.entrySet(); boolean isChecked = false; //判断是否有未选中的,如果有未选中isChecked = true;退出循环 for (Map.Entry<Integer, Boolean> entry : set) { if (entry.getValue() == false) { isChecked = true; break; } } //如果有未选中的 isChecked = true;就把所有item的checkbox设置成true,反之就是全选中了.设置成全不选中 for (Map.Entry<Integer, Boolean> entry : set) { entry.setValue(isChecked); } getCheckedNumber(); notifyDataSetChanged(); } //反选方法 public void ReverseCheckItem() { Set<Map.Entry<Integer, Boolean>> entries = map.entrySet(); for (Map.Entry<Integer, Boolean> set : entries) { set.setValue(!set.getValue()); } getCheckedNumber(); notifyDataSetChanged(); } //单选 public void CheckOleyOne(int position) { Set<Map.Entry<Integer, Boolean>> entries = map.entrySet(); for (Map.Entry<Integer, Boolean> entry : entries) { entry.setValue(false); } map.put(position, true); notifyDataSetChanged(); } @Override public int getItemCount() { return list.size(); } class MyViewHolder extends RecyclerView.ViewHolder { private TextView item_tv; private CheckBox checkbox; public MyViewHolder(View itemView) { super(itemView); item_tv = (TextView) itemView.findViewById(R.id.item_tv); checkbox = (CheckBox) itemView.findViewById(R.id.checkbox); } }}
阅读全文
0 0
- RecyclerView使用,item实现全选,反选,单选,计算checkbox选中的个数
- RecyclerView嵌套CheckBox实现单选全选反选操作每条Item添加分割线
- RecyclerView使用,item分割线,全选反选按钮实现
- 使用RecyclerView展示checkBox全选反选
- jquery实现全选、反选、获得所有选中的checkbox
- Android RecyclerView Item动画(Checkbox全选、单选)
- Android 实现RecyclerView嵌套RecyclerView 实现购物车的全选 反选 单选 商家全选
- RecyclerView单选框删除条目,全选删除,Recyclerview 实现多选,单选,全选,反选,批量删除的步骤 1.在Recyclerview布局中添加上底部的全选和反选按钮,删除按钮,和计算
- 如何用jquery实现checkbox的全选、反选、取消反选,以及如何得到选中的checkbox的值
- 使用js实现checkbox的全选与反选功能
- jqeury checkbox全选/反选 ,子选项全选,全选选中
- JQuery实现的 checkbox 全选、反选。
- JS实现CheckBox的全选/反选
- JQuery实现的 checkbox 全选、反选。
- checkbox全选/反选的实现
- js用单按钮实现checkbox全选/反选
- jquery实现全选、反选、获得所有选中的checkbox (记录专用
- 关于Recyclerview 实现多选,单选,全选,反选,批量删除的功能的实现
- matlab2c使用c++实现matlab函数系列教程-sum函数
- PHP的trim和preg_replace导致乱码的问题及解决
- Android—环信聊天开发总结以及遇到的坑
- mySQL之delete from 与truncate
- java 程序题 递归算法 判断一个整数化成二进制之后有多少个1 (两种思路)
- RecyclerView使用,item实现全选,反选,单选,计算checkbox选中的个数
- MySQL 5.7重置root密码
- Hibernate: 三种状态和CRUD四种操作
- 【Java】ArrayList源码剖析
- 材质库总结
- 用JS实现系统常见日周月时间按钮切换效果
- CCA典型关联分析
- PHP中static的用法
- Python2.7 & OpenCV3.0实现人脸检测的简单实例