ListView與item中控件焦點搶佔及錯位問題

焦點搶佔

通常在LitView的item裏面有可以點擊的控件時,這個時候ListView的item將會失去焦點不能點擊。
這時有兩種解決辦法分別如下:
方法一:
就是在該item中要點擊的控件上設置android:focusable=”false”這個屬性;

方法二:
就是在該item父控件也就是最外層控件上設置android:descendantFocusability=”blocksDescendants”.

錯位問題

通過上面兩個方法就可以解決item與item中控件焦點的問題。但這時候你會發現新的問題,那就是list一屏展示不下時,如當點擊勾選一個CheckBox 時,再滑到另一屏時,你會發現另一屏的也有被勾選上了。所有的CheckBox全錯位了,一下感覺全亂套了,這時也有兩種方法可以解決。

方法一:
就是在實體Bean對象中添加一個boolean屬性來紀錄當前狀態,及實現get、set方法;完成後再到適配器Adapter的getView中代碼實現如下:

     ......
     final CheckBox checkBox = holder.getView(R.id.id_cb);
                checkBox.setChecked(bean.isCheck());
                checkBox.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        bean.setCheck(checkBox.isChecked());
                    }
                });
   ......

方法二:
就是在把當前狀態保存到一個集合裏面,代碼如下:

  ......
   List<Integer> mPos = new ArrayList<>();
    final CheckBox checkBox = holder.getView(R.id.id_cb);
//                checkBox.setChecked(bean.isCheck());
                 checkBox.setChecked(false);
                 if (mPos.contains(position)){
                     checkBox.setChecked(true);
                 }
                checkBox.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
//                        bean.setCheck(checkBox.isChecked());
                        if (checkBox.isClickable()){
                            mPos.add(holder.position);
                        }else {
                            mPos.remove((Integer) holder.position);
                        }
                    }
                });

  ......
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章