listView嵌套checkbox的一些问题及解决办法

问题1

        因为checkbox的点击事件优先级高于listview的item点击事件所以,checkbox点击后,item的事件将不能触发。

    解决方法:

        要想checkbox和item的事件都能触发,只需要在item的根布局中添加

android:descendantFocusability="blocksDescendants"


问题2

        由于baseAdapter里的getview()方法里的convertview参数可以重用item,导致你选中一个item里的checkbox后,每隔一定长度的item里的checkbox也会显示选中状态

    解决方法:

        用一个hashmap记录每个item里checkbox的状态,在每次取出item时,自己根据hashmap里的值初始化checkbox的状态。

h.checkBox.setChecked(checkBoxState.get(position));


问题3

        listView滚动时,item里含有checkbox的话,他会自动调用setOnCheckedChangeListener();这样的话checkbox的状态就会不断变化。

       在初始化checkbox的状态值前,添加h.checkBox.setOnCheckedChangeListener(null);所以问题2和问题3一般会一起出现,都要一起解决。

  h.checkBox.setOnCheckedChangeListener(null);   
  h.checkBox.setChecked(checkBoxState.get(position));
 h.checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
         @Override
         public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
             checkBoxState.put(position, isChecked);
         }
    });


你可能感兴趣的:(ListView,checkbox,嵌套)