我遇到了一个奇怪的问题。我有一个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,但是当我向下滚动时也是如此。为什么呢?
答案 0 :(得分:1)
当您滚动getView
方法时,由于适配器的视图回收行为而被调用。并且setChecked
方法将调用哪个触发器OnCheckedChangeListener
。
答案 1 :(得分:0)
卡恩是正确的,它已经被回收了,因此在滚动时,它会生成视图并:
check.setChecked(holders.get(position).isChecked);
设置它以便每次滚动时都会调用您的侦听器,因为您将侦听器设置为在更改检查时侦听。将您的setOnCheckedChangeListener更改为setOnClickListener。