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
原创粉丝点击