Listview,自定义适配器和复选框 [英] Listview, custom adapter and checkboxes
问题描述
我的适配器有问题。下面是代码:
i got an issue with my adapter. Here is the code:
@Override
public View getView(final int position, final View convertView, final ViewGroup parent) {
final ViewHolder viewHolder;
View view = convertView;
if (view == null) {
view = LayoutInflater.from(mContext).inflate(R.layout.row, parent, false);
viewHolder = new ViewHolder();
viewHolder.textTitle = (TextView) view.findViewById(R.id.title);
viewHolder.checkBox = (CheckBox) view.findViewById(R.id.checkBox);
viewHolder.checkBox.setTag(position);
view.setTag(viewHolder);
viewHolder.imageView = (ImageView) view.findViewById(R.id.activity_googlecards_card_imageview);
} else {
viewHolder = (ViewHolder) view.getTag();
viewHolder.checkBox.getTag(position);
}
viewHolder.textTitle.setText(getItem(position).getTitle());
viewHolder.checkBox.setChecked(myIntegerArrayList.contains(position));
viewHolder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
myIntegerArrayList.add(position);
} else {
myIntegerArrayList.remove((Object) position);
}
}
});
return view;
}
private static class ViewHolder {
TextView textTitle;
CheckBox checkBox;
}
复选框本身可以正常工作。.我的意思是,该位置已正确添加到我的数组列表,但是如果(假设我检查了位置0的项目)我滚动到底部,那么,滚动回顶部,则项目0返回未选中状态,即使该位置位于我的数组列表中(已通过日志验证)
The checkbox itself works fine.. I mean, the position is correctly added to my arraylist but if (assuming i checked the item at position 0) i scroll to bottom, then, scroll back to top the item 0 return unchecked even if the position is into my arraylist (verified with logs)
推荐答案
从中移出
并在<$ c $中用 viewHolder.checkBox.setTag(position);
viewHolder.checkBox.getTag();
更改位置
c> onCheckedChanged ,因此您的代码必须类似于:
move out viewHolder.checkBox.setTag(position);
from if
and change position
with viewHolder.checkBox.getTag();
in onCheckedChanged
, so your code must be like:
@Override
public View getView(final int position, final View convertView, final ViewGroup parent) {
final ViewHolder viewHolder;
View view = convertView;
if (view == null) {
view = LayoutInflater.from(mContext).inflate(R.layout.row, parent, false);
viewHolder = new ViewHolder();
viewHolder.textTitle = (TextView) view.findViewById(R.id.title);
viewHolder.checkBox = (CheckBox) view.findViewById(R.id.checkBox);
view.setTag(viewHolder);
viewHolder.imageView = (ImageView) view.findViewById(R.id.activity_googlecards_card_imageview);
} else {
viewHolder = (ViewHolder) view.getTag();
viewHolder.checkBox.getTag(position);
}
viewHolder.checkBox.setTag(position);
viewHolder.textTitle.setText(getItem(position).getTitle());
viewHolder.checkBox.setChecked(myIntegerArrayList.contains(position));
viewHolder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
myIntegerArrayList.add(viewHolder.checkBox.getTag());
} else {
myIntegerArrayList.remove((Object) viewHolder.checkBox.getTag());
}
}
});
return view;
}
您需要移出 viewHolder.checkBox.setTag(位置);
因为回收ListView ,您需要保存您的要在 onCheckedChanged
中获得该位置。
you need move out viewHolder.checkBox.setTag(position);
because Recycle ListView, you need save your position in Tag to getting that in onCheckedChanged
.
您需要使用 viewHolder.checkBox。 getTag();
in onCheckedChanged
因为同样的原因。
you need use viewHolder.checkBox.getTag();
in onCheckedChanged
because same reason.
很高兴提供帮助
这篇关于Listview,自定义适配器和复选框的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!