安卓開發:listview長按進入多選刪除操作

農夫YH發表於2018-07-07

在實際開發中有好多多選刪除的使用場景,我們現在遇到的是,listview 裡邊是一個 BaseAdapter 出來的列表

簡單分析下,大概是需要這樣操作,首先 listview的 item項裡要有一個 多選框 這個多選框 預設是隱藏的。
一般情況下 點選是要進入詳情頁面。然後長按的話進入多選刪除操作。所以我們這裡要設定兩個事件 分別為:
OnClickListener 和 OnLongClickListener

先看下佈局檔案中 設定了 checkBox 不可以被點選 以及隱藏 ,同時我還 設定了一個全域性變數。去判斷此時是否處雨多選狀態。
以及全域性設定了一個 map 。map 中儲存了 每個項的id 以及選中狀態。 這樣在呼叫 Adapter的getView 方法時候可以去去根據多選
狀態 以及 是否選中 去進行 選中操作
OnLongClickListener 事件 點選後進入操作狀態。設定 CheckBox 顯示 設定全域性變數為多選狀態

OnClickListener 根據多選狀態 做操作

    <CheckBox
            android:id="@+id/cb_select"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:visibility="invisible"
            android:layout_gravity="center"
            android:clickable="false"
            />
class Videoad extends BaseAdapter {


        @Override
        public int getCount() {
            return videosList.size();
        }

        @Override
        public Object getItem(int i) {
            return i;
        }

        @Override
        public long getItemId(int i) {
            return i;
        }

        @Override
        public View getView(int i, View view, ViewGroup viewGroup) {
            // 1.解析佈局檔案 成為VIEW
            LayoutInflater inflater = LayoutInflater.from(getActivity());
            View view1 = inflater.inflate(R.layout.my_videocollect_item, viewGroup, false);
            //2.填充資料

            CheckBox cb_select = view1.findViewById(R.id.cb_select);
            if(isselect){
                cb_select.setVisibility(View.VISIBLE);
                if(deletemap.get(cid+"")){
                    cb_select.setChecked(true);
                }else{
                    cb_select.setChecked(false);
                }
            }
            LinearLayout video_item = view1.findViewById(R.id.video_item);

            final int vid = videosList.get(i).getId();
            video_item.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    if(isselect){
                        boolean isseelctitem =    deletemap.get(""+cid);
                        if(isseelctitem ){
                            deletemap.put(""+cid,false);
                        }else{
                            deletemap.put(""+cid,true);
                        }
                        videoad.notifyDataSetChanged();
                    }else{
                        Intent intent = new Intent(getActivity().getApplicationContext(),Videodetail.class);
                        intent.putExtra("id", vid);
                        startActivity(intent);

                    }
                }
            });

            video_item.setOnLongClickListener(new View.OnLongClickListener() {
                @Override
                public boolean onLongClick(View view) {
                    isselect = true;
                    deleteall.setVisibility(View.VISIBLE);
                    videoad.notifyDataSetChanged();
                    return false;
                }
            });

            return view1;

        }
    }

相關文章