安卓checkbox实现全选反选

来源:互联网 发布:个性扑克牌制作软件 编辑:程序博客网 时间:2024/06/05 18:39

效果图
这里写图片描述

activity_main.XML

    <TextView        android:id="@+id/tv"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:layout_gravity="center_vertical" />    <LinearLayout        android:id="@+id/line"        android:layout_width="fill_parent"        android:layout_height="50dp"        android:layout_below="@+id/tv"        android:orientation="horizontal" >        <Button            android:id="@+id/bt_selectall"            android:layout_width="80dp"            android:layout_height="fill_parent"            android:text="全选" />        <Button            android:id="@+id/bt_cancleselectall"            android:layout_width="80dp"            android:layout_height="fill_parent"            android:text="反选" />        <Button            android:id="@+id/bt_deselectall"            android:layout_width="80dp"            android:layout_height="fill_parent"            android:text="取消选择" />    </LinearLayout>    <ListView        android:id="@+id/lv"        android:layout_width="fill_parent"        android:layout_height="fill_parent"        android:layout_below="@+id/line" />

item.XML

    <CheckBox        android:id="@+id/item_cb"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:clickable="false"        android:focusable="false"        android:focusableInTouchMode="false"        android:gravity="center_vertical" />    <TextView        android:id="@+id/item_tv"        android:layout_width="0dp"        android:layout_height="wrap_content"        android:layout_gravity="center_vertical"        android:layout_weight="1" />

MainActivity

public class MainActivity extends AppCompatActivity {    private ListView lv;    private MyAdapter mAdapter;    private ArrayList<String> list;    private Button bt_selectall;    private Button bt_cancel;    private Button bt_deselectall;    private int checkNum; // 记录选中的条目数量    private TextView tv_show;// 用于显示选中的条目数量    /** Called when the activity is first created. */    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        /* 实例化各个控件 */        lv = (ListView) findViewById(R.id.lv);        bt_selectall = (Button) findViewById(R.id.bt_selectall);        bt_cancel = (Button) findViewById(R.id.bt_cancleselectall);        bt_deselectall = (Button) findViewById(R.id.bt_deselectall);        tv_show = (TextView) findViewById(R.id.tv);        list = new ArrayList<String>();        // 为Adapter准备数据        initDate();        // 实例化自定义的MyAdapter        mAdapter = new MyAdapter(list, this);        // 绑定Adapter        lv.setAdapter(mAdapter);        // 全选按钮的回调接口        bt_selectall.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                // 遍历list的长度,将MyAdapter中的map值全部设为true                for (int i = 0; i < list.size(); i++) {                    MyAdapter.getIsSelected().put(i, true);                }                // 数量设为list的长度                checkNum = list.size();                // 刷新listview和TextView的显示                dataChanged();            }        });        // 反选按钮的回调接口        bt_cancel.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                // 遍历list的长度,将已选的设为未选,未选的设为已选                for (int i = 0; i < list.size(); i++) {                    if (MyAdapter.getIsSelected().get(i)) {                        MyAdapter.getIsSelected().put(i, false);                        checkNum--;                    } else {                        MyAdapter.getIsSelected().put(i, true);                        checkNum++;                    }                }                // 刷新listview和TextView的显示                dataChanged();            }        });        // 取消按钮的回调接口        bt_deselectall.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                // 遍历list的长度,将已选的按钮设为未选                for (int i = 0; i < list.size(); i++) {                    if (MyAdapter.getIsSelected().get(i)) {                        MyAdapter.getIsSelected().put(i, false);                        checkNum--;// 数量减1                    }                }                // 刷新listview和TextView的显示                dataChanged();            }        });        // 绑定listView的监听器        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {            @Override            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,                                    long arg3) {                // 取得ViewHolder对象,这样就省去了通过层层的findViewById去实例化我们需要的cb实例的步骤                MyAdapter.ViewHolder holder = (MyAdapter.ViewHolder) arg1.getTag();                // 改变CheckBox的状态                holder.cb.toggle();                // 将CheckBox的选中状况记录下来                MyAdapter.getIsSelected().put(arg2, holder.cb.isChecked());                // 调整选定条目                if (holder.cb.isChecked() == true) {                    checkNum++;                } else {                    checkNum--;                }                // 用TextView显示                tv_show.setText("已选中" + checkNum + "项");            }        });    }    // 初始化数据    private void initDate() {        for (int i = 0; i < 15; i++) {            list.add("data" + " " + i);        }    }    // 刷新listview和TextView的显示    private void dataChanged() {        // 通知listView刷新        mAdapter.notifyDataSetChanged();        // TextView显示最新的选中数目        tv_show.setText("已选中" + checkNum + "项");    }}
原创粉丝点击