1. 程式人生 > >ListView多條目與checkBox全選刪除操作

ListView多條目與checkBox全選刪除操作

1、多條目

效果圖:
這裡寫圖片描述

主要不一樣的地方是在自定義的MyAdapter.java中。

    private final int TYPE_1 = 0;
    private final int TYPE_2 = 1;

    //指定想要實現的佈局型別
    @Override
    public int getItemViewType(int position) {
        if(position % 2 == 0) {
            return TYPE_2;
        }
        else {
            return TYPE_1;
        }
    }

    //指定要載入多少個條目型別
@Override public int getViewTypeCount() { return 2; } @Override public View getView(int position, View convertView, ViewGroup parent) { int type = getItemViewType(position); switch (type) { case TYPE_1: convertView = View.inflate(mContext, R.layout.layout_item1, null
); break; case TYPE_2: convertView = View.inflate(mContext, R.layout.layout_item2, null); break; default: break; } return convertView; }

2、checkBox全選刪除操作

介面:
這裡寫圖片描述

全選:
這裡寫圖片描述

刪除:
這裡寫圖片描述
這裡寫圖片描述

UI介面的設計程式碼就不寫了。直接上新增的邏輯程式碼。

程式碼:

mAllSelected.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(mAllSelected.getText().equals("全選")) {
                    mAllSelected.setText("取消");
                    for(int i = 0; i < itemList.size(); i++) {
                        itemList.get(i).setCheckBox(true);
                    }
                    myAdapter.notifyDataSetChanged();
                }
                else {
                    mAllSelected.setText("全選");
                    for(int i = 0; i < itemList.size(); i++) {
                        itemList.get(i).setCheckBox(false);
                    }
                    myAdapter.notifyDataSetChanged();
                }
            }
        });

itemList為資料集。注意修改後資料,新增myAdapter.notifyDataSetChanged();語句。

MyAdapter.java:


//        myHandler.checkBox.setChecked(thing.getCheckBox());
//        myHandler.checkBox.setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View v) {
//                Item thing = mItemList.get(position);
//                if(myHandler.checkBox.isChecked()) {
//                    thing.setCheckBox(true);
//                }
//                else {
//                    thing.setCheckBox(false);
//                }
//            }
//        });

        myHandler.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                Item thing = mItemList.get(position);
                if(myHandler.checkBox.isChecked()) {
                    thing.setCheckBox(true);
                }
                else {
                    thing.setCheckBox(false);
                }
            }
        });

        myHandler.checkBox.setChecked(thing.getCheckBox());

mItemList是MyAdapter中的資料集。

這裡使用setOnClickListener()與setOnCheckedChangeListener()都可以完成單選item中checkBox狀態改變的操作。但是setOnCheckedChangeListener()可以監聽checkBox的所有變化,而setOnClickListener()只能監聽點選事件,不能監聽setCheckBox()方法等。

其次是,當使用setOnCheckedChangeListene()時, myHandler.checkBox.setChecked(thing.getCheckBox());語句必須在監聽事件之後執行,而使用setOnClickListener()時,myHandler.checkBox.setChecked(thing.getCheckBox());語句位置可先可後。