效果图
前几天看到有朋友发帖问关于ListView的多选、反选、取消等问题,我自己想了一下,最好的解决方法应该是生成一个list来维系checkbox组的选择状态。利用listview的getChildAt方法来获得当前状态会有很多很多的问题,所以不建议采用。
另外,本文来增加了一个关于被选择的checkbox删除的功能,供大家参考
思路
- 利用SparseArray<
Boolean
> checkBoxStates作为一个记录checkbox组状态的组合 - 全选、反选、取消动作将会影响checkBoxStates中的值,并触发adapter.notifyDataSetChanged()
- 用户单击checkbox行为将触发onCheckedChangeListener
- 删除动作会有一点复杂,会有一些细节要注意,请看下面代码的注释
- 要分清keyAt(int index)和get(int key)、put(int key,boolean state)和setValueAt(int index,boolean state)的区别
package com.example.yuanh.checkboxtest;
import android.content.DialogInterface;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ListView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
SparseArray<Boolean> checkStates;