向下滚动时会触发OnCheckedChangeListener

时间:2015-01-31 09:51:48

标签: java android listview checkbox

我遇到了一个奇怪的问题。我有一个Android应用程序,它包含包含ListViewAdapter的活动。每个元素都包含checkbox。 我还有以下代码 -

public View getView(final int position, View convertView, ViewGroup parent) {

    CheckBox check = (CheckBox) view.findViewById(R.id.myCheckBox);
    if(check.getTag() == null) {
        check.setTag(position);
        check.setOnCheckedChangeListener(myCheckChangList);
    }
   check.setChecked(holders.get(position).isChecked);              
}

private OnCheckedChangeListener myCheckChangList = new OnCheckedChangeListener() {
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {  
          holders.get((Integer) buttonView.getTag()).isChecked = isChecked;
      }
};  

当我将listview向下滚动OnCheckedChangeListener个{fire}并重置checkbox(如果已设置)。为什么会这样?当我手动点击checkbox或以编程方式调用 setChecked 时,我会激活OnCheckedChangeListener,但是当我向下滚动时也是如此。为什么呢?

2 个答案:

答案 0 :(得分:1)

当您滚动getView方法时,由于适配器的视图回收行为而被调用。并且setChecked方法将调用哪个触发器OnCheckedChangeListener

答案 1 :(得分:0)

卡恩是正确的,它已经被回收了,因此在滚动时,它会生成视图并:

check.setChecked(holders.get(position).isChecked); 

设置它以便每次滚动时都会调用您的侦听器,因为您将侦听器设置为在更改检查时侦听。将您的setOnCheckedChangeListener更改为setOnClickListener。