0

我有一个ListView每个地方ListItem都有一个CheckBox布局。当 aCheckBox被激活并滚动出可见区域时,它就会被停用。我知道ListView重用了Views并且我必须CheckBoxes在我的getView()方法中保存状态,但是我有两个问题。

4

1 回答 1

1

您正在尝试在字符串上调用 setSelected。您需要在复选框上调用它。变量“list”是字符串的 ArrayList。

在这两种情况下,您都试图在 String 类型上调用 Checkbox 方法。您需要在复选框上调用它们。

**编辑

您需要在 getView 中执行以下操作:

  1. 如果convertView 不为null,则通过调用convertView 子级的适当方法将其状态保存到“viewholder”类。如果 convertView 为空,您正在尝试执行此操作,这是错误的。
  2. 如果 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 回答