我想制作一个列表视图,其中一个项目包含一个文本和一个复选框,而对于复选框侦听器,我想使用 onCheckedChange。我不明白这个监听器的行为,因为当我从列表顶部检查一个项目然后我向下滚动并返回顶部时,我的复选框状态未选中,但如果我在列表中播放更多,它似乎工作一般。我不明白我是否使用了不正确的 onCheckedChangeListener 或者这是一个普遍问题。所以这是我的代码的一部分:
public View getView(int position, View convertView, ViewGroup parent) {
PickerItemDto item = items.get(position);
if (convertView == null) {
LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
convertView = mInflater.inflate(R.layout.picker_item, null);
ViewHolder viewHolder = new ViewHolder(convertView);
viewHolder.checkboxChange= new OnCheckboxChange();
viewHolder.cbSelectFriend.setOnCheckedChangeListener(viewHolder.checkboxChange);
convertView.setTag(viewHolder);
}
ViewHolder holder = (ViewHolder) convertView.getTag();
holder.tvName.setText(item.getName());
holder.cbSelectFriend.setChecked(item.isChecked());
holder.cbSelectFriend.setTag(item);}
private class OnCheckboxChange implements CompoundButton.OnCheckedChangeListener {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
CheckBox cb= (CheckBox) buttonView;
PickerItemDto item = (PickerItemDto) cb.getTag();
item.setChecked(isChecked);
}}
据我测试,问题是因为当我 scoll 列表时多次调用 onCheckboxChanged 并且 isChecked 值对于我已经检查过的元素为“假”。我知道我可以使用 onClickListener 但我需要 onCheckBoxChange 因为我想使用一个只有这个监听器可用的库。
谁能解释我的错在哪里?谢谢