1. 程式人生 > >解決列表 (ListView GrifView RecyclerView )結合CheckBox實現列表選擇的的問題

解決列表 (ListView GrifView RecyclerView )結合CheckBox實現列表選擇的的問題

</pre><pre code_snippet_id="1651469" snippet_file_name="blog_20160418_2_235831" name="code" class="html"><span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> 實現思路:由於列表類都是需要重複使用Item佈局,所以這裡不要監聽CheckBox的CheckChange事件,不然問題會變得很複雜。只需要監聽列表的單擊事件,把點選事件</span>

繞過CheckBox傳遞到Item,步驟1、2的設定就是起到這種效果。CheckBox只是起到顯示的作用,它的Check改變監聽事件這裡不會用到。接著通過監聽Item的單擊事件設定CheckBox是否選中,用setChecked

1、確保Item的佈局有新增這個屬性

android:descendantFocusability="blocksDescendants"

2、確保CheckBox新增這個屬性
android:clickable="false"

3、處理Item的單擊事件

(1)RecyclerView處理方式

   class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
            CheckBox cbTab;
            View view;


            public ViewHolder(View itemView, int viewType) {
                super(itemView);
                this.view = itemView;
                    cbTab = (CheckBox) itemView.findViewById(R.id.cb_tab);
                    view.setOnClickListener(this);
               
            }

            @Override
            public void onClick(View view) {
                int position=getAdapterPosition();
                if (mTagList.get(position).isChecked()) {
                    mTagList.get(position).setChecked(false);
                    cbTab.setChecked(false);

                } else {
                    mTagList.get(position).setChecked(true);
                    cbTab.setChecked(true);

                }
            }
        }


(2)ListView或GridView的處理方式

  gvTag.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                CheckBox cbTab= (CheckBox) view.findViewById(R.id.cb_tab);
                if (mTagList.get(i).isChecked()) {
                    mTagList.get(i).setChecked(false);
                    cbTab.setChecked(false);
                  
                } else {
                    mTagList.get(i).setChecked(true);
                    cbTab.setChecked(true);
              
                }

            }
        });