ChokBox的全选反选以及计算数量

首先来看下主布局:

<?xml version="1.0" encoding="utf-8"?>
  <LinearLayout 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"
  android:orientation="vertical"
  tools:context="com.example.asus.rikao04.MainActivity">
   
  <LinearLayout
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:orientation="horizontal"
  android:padding="10sp">
  <Button
  android:id="@+id/button_quan"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="全选"
  android:padding="10sp"/>
  <Button
  android:id="@+id/button_fan"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="返选"
  android:padding="10sp"/>
  </LinearLayout>
   
  <android.support.v7.widget.RecyclerView
  android:id="@+id/recyclerview"
  android:layout_width="match_parent"
  android:layout_height="0dp"
  android:layout_weight="1"
  />
  <Button
  android:id="@+id/button_conut"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="数量:"/>
   
  </LinearLayout>
然后是item布局:

<?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="50dp"
  android:padding="10sp"
  android:gravity="center_vertical"
  android:orientation="horizontal">
  <CheckBox
  android:id="@+id/checkbox"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content" />
  <TextView
  android:id="@+id/name"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="明知是意外"/>
   
   
  </LinearLayout>
好了,接下来就是MainActivity的代码了:



public class MainActivity extends AppCompatActivity {
   
  @BindView(R.id.button_quan)
  Button buttonQuan;
  @BindView(R.id.button_fan)
  Button buttonFan;
  @BindView(R.id.recyclerview)
  RecyclerView recyclerview;
  @BindView(R.id.button_conut)
  Button tv_show;// 用于显示选中的条目数量
   
  private int checkNum; // 记录选中的条目数量
   
   
  private List<String> mlist = new ArrayList<>();
  private Myadapter myadapter;
   
  @Override
  protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  ButterKnife.bind(this);
  initview();
  }
  //这里是模拟添加数据
  private void initview() {
  for (int i = 0; i < 30; i++) {
  mlist.add("商品" + i);
  }
  recyclerview.setLayoutManager(new LinearLayoutManager(this));
  myadapter = new Myadapter(this, mlist);
  recyclerview.setAdapter(myadapter);
   
  buttonQuan.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View v) {
  // 遍历list的长度,将MyAdapter中的map值全部设为true
  for (int i = 0; i < mlist.size(); i++) {
  getIsSelected().put(i, true);
  }
  // 数量设为list的长度
  checkNum = mlist.size();
  // 刷新listview和TextView的显示
  dataChanged();
  }
  });
   
  // 反选按钮的回调接口
  buttonFan.setOnClickListener(new View.OnClickListener() {
   
  @Override
  public void onClick(View v) {
  // 遍历list的长度,将已选的设为未选,未选的设为已选
  for (int i = 0; i < mlist.size(); i++) {
  if (getIsSelected().get(i)) {
  Myadapter.getIsSelected().put(i, false);
  checkNum--;
  } else {
  Myadapter.getIsSelected().put(i, true);
  checkNum++;
  }
   
  }
  // 刷新listview和TextView的显示
  dataChanged();
  }
  });
   
  myadapter.setFindSelectBox(new Myadapter.FindSelectBox() {
  @Override
  public void findBox(int count) {
  tv_show.setText("已选中" + count + "");
  }
  });
   
   
  }
   
  private void dataChanged() {
  myadapter.notifyDataSetChanged();
  // TextView显示最新的选中数目
  tv_show.setText("已选中" + checkNum + "");
  }
   
   
  }
接下来就是RecyclerView的适配器了:

public class MainActivity extends AppCompatActivity {
   
  @BindView(R.id.button_quan)
  Button buttonQuan;
  @BindView(R.id.button_fan)
  Button buttonFan;
  @BindView(R.id.recyclerview)
  RecyclerView recyclerview;
  @BindView(R.id.button_conut)
  Button tv_show;// 用于显示选中的条目数量
   
  private int checkNum; // 记录选中的条目数量
   
   
  private List<String> mlist = new ArrayList<>();
  private Myadapter myadapter;
   
  @Override
  protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  ButterKnife.bind(this);
  initview();
  }
   
  private void initview() {
  for (int i = 0; i < 30; i++) {
  mlist.add("商品" + i);
  }
  recyclerview.setLayoutManager(new LinearLayoutManager(this));
  myadapter = new Myadapter(this, mlist);
  recyclerview.setAdapter(myadapter);
   
  buttonQuan.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View v) {
  // 遍历list的长度,将MyAdapter中的map值全部设为true
  for (int i = 0; i < mlist.size(); i++) {
  getIsSelected().put(i, true);
  }
  // 数量设为list的长度
  checkNum = mlist.size();
  // 刷新listview和TextView的显示
  dataChanged();
  }
  });
   
  // 反选按钮的回调接口
  buttonFan.setOnClickListener(new View.OnClickListener() {
   
  @Override
  public void onClick(View v) {
  // 遍历list的长度,将已选的设为未选,未选的设为已选
  for (int i = 0; i < mlist.size(); i++) {
  if (getIsSelected().get(i)) {
  Myadapter.getIsSelected().put(i, false);
  checkNum--;
  } else {
  Myadapter.getIsSelected().put(i, true);
  checkNum++;
  }
   
  }
  // 刷新listview和TextView的显示
  dataChanged();
  }
  });
   
  myadapter.setFindSelectBox(new Myadapter.FindSelectBox() {
  @Override
  public void findBox(int count) {
  tv_show.setText("已选中" + count + "");
  }
  });
   
   
  }
   
  private void dataChanged() {
  myadapter.notifyDataSetChanged();
  // TextView显示最新的选中数目
  tv_show.setText("已选中" + checkNum + "");
  }
   
   
  }

public class Myadapter extends RecyclerView.Adapter<Myadapter.ViewHolder> {
  private List<String> mlist;
  private Context context;
  private Button buttonConut;
   
  // 用来控制CheckBox的选中状况
  private static HashMap<Integer,Boolean> isSelected;
   
  public Myadapter(Context context, List<String> mlist) {
  this.mlist = mlist;
  this.context = context;
  isSelected = new HashMap<Integer, Boolean>();
  // 初始化数据
  initDate();
   
   
  }
   
  private void initDate() {
  for(int i=0; i<mlist.size();i++) {
  getIsSelected().put(i,false);
  }
  }
  public static HashMap<Integer,Boolean> getIsSelected() {
  return isSelected;
  }
   
   
  @Override
  public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
  View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, parent, false);
  ViewHolder viewHolder = new ViewHolder(view);
  return viewHolder;
  }
   
  @Override
  public void onBindViewHolder(final ViewHolder holder, final int position) {
  holder.name.setText(mlist.get(position));
  holder.itemView.setTag(position);
   
  // 根据isSelected来设置checkbox的选中状况
  holder.checkbox.setChecked(getIsSelected().get(position));
   
  holder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
  @Override
  public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
   
  int pos = holder.getLayoutPosition();
  isSelected.put(pos, isChecked);
   
  int count = 0;
  for (int i = 0; i < isSelected.size(); i++) {
   
  if(isSelected.get(i).booleanValue()){
  count++;
  }
  }
   
  findSelectBox.findBox(count);
   
  }
  });
   
  }
  public interface FindSelectBox{
  void findBox(int count);
  }
  private FindSelectBox findSelectBox;
   
  public void setFindSelectBox(FindSelectBox findSelectBox){
  this.findSelectBox = findSelectBox;
  }
   
   
   
  @Override
  public int getItemCount() {
  return mlist == null ? 0 : mlist.size();
  }
  public interface setonItemClick{
  void onItemclick(View view,int position);
   
   
  }
  setonItemClick setonItemClick;
   
  public void setSetonItemClick(Myadapter.setonItemClick setonItemClick) {
  this.setonItemClick = setonItemClick;
  }
   
  public class ViewHolder extends RecyclerView.ViewHolder {
  @BindView(R.id.checkbox)
  public CheckBox checkbox;
  @BindView(R.id.name)
  TextView name;
   
  public ViewHolder(View itemView) {
  super(itemView);
  ButterKnife.bind(this, itemView);
  }
  }
  }


public class MainActivity extends AppCompatActivity {
   
  @BindView(R.id.button_quan)
  Button buttonQuan;
  @BindView(R.id.button_fan)
  Button buttonFan;
  @BindView(R.id.recyclerview)
  RecyclerView recyclerview;
  @BindView(R.id.button_conut)
  Button tv_show;// 用于显示选中的条目数量
   
  private int checkNum; // 记录选中的条目数量
   
   
  private List<String> mlist = new ArrayList<>();
  private Myadapter myadapter;
   
  @Override
  protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  ButterKnife.bind(this);
  initview();
  }
   
  private void initview() {
  for (int i = 0; i < 30; i++) {
  mlist.add("商品" + i);
  }
  recyclerview.setLayoutManager(new LinearLayoutManager(this));
  myadapter = new Myadapter(this, mlist);
  recyclerview.setAdapter(myadapter);
   
  buttonQuan.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View v) {
  // 遍历list的长度,将MyAdapter中的map值全部设为true
  for (int i = 0; i < mlist.size(); i++) {
  getIsSelected().put(i, true);
  }
  // 数量设为list的长度
  checkNum = mlist.size();
  // 刷新listview和TextView的显示
  dataChanged();
  }
  });
   
  // 反选按钮的回调接口
  buttonFan.setOnClickListener(new View.OnClickListener() {
   
  @Override
  public void onClick(View v) {
  // 遍历list的长度,将已选的设为未选,未选的设为已选
  for (int i = 0; i < mlist.size(); i++) {
  if (getIsSelected().get(i)) {
  Myadapter.getIsSelected().put(i, false);
  checkNum--;
  } else {
  Myadapter.getIsSelected().put(i, true);
  checkNum++;
  }
   
  }
  // 刷新listview和TextView的显示
  dataChanged();
  }
  });
   
  myadapter.setFindSelectBox(new Myadapter.FindSelectBox() {
  @Override
  public void findBox(int count) {
  tv_show.setText("已选中" + count + "");
  }
  });
   
   
  }
   
  private void dataChanged() {
  myadapter.notifyDataSetChanged();
  // TextView显示最新的选中数目
  tv_show.setText("已选中" + checkNum + "");
  }
   
   
  }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值