我有一个ListView
每个地方ListItem
都有一个CheckBox
布局。当 aCheckBox
被激活并滚动出可见区域时,它就会被停用。我知道ListView
重用了Views
并且我必须CheckBoxes
在我的getView()
方法中保存状态,但是我有两个问题。
问问题
176 次
1 回答
1
您正在尝试在字符串上调用 setSelected。您需要在复选框上调用它。变量“list”是字符串的 ArrayList。
在这两种情况下,您都试图在 String 类型上调用 Checkbox 方法。您需要在复选框上调用它们。
**编辑
您需要在 getView 中执行以下操作:
- 如果convertView 不为null,则通过调用convertView 子级的适当方法将其状态保存到“viewholder”类。如果 convertView 为空,您正在尝试执行此操作,这是错误的。
- 如果 convertView 为 null,那么它不是一个回收的视图,也没有什么可保存的。
基本上,您的代码应如下所示:
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder = null;
if (convertView == null) {
LayoutInflater inflator = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflator.inflate(R.layout.listitem, parent, false);
} else {
//you should change viewHolder to simply store a boolean, rather than the entire checkbox. It should just store whether or not the checkbox was checked.
viewHolder = new ViewHolder();
viewHolder.text = (TextView) convertView.findViewById(R.id.listcontent);
viewHolder.isChecked = ((CheckBox) convertView.findViewById(R.id.cb)).isChecked();
//do whatever else here
}
return convertView;
}
于 2012-08-23T14:36:15.113 回答