滚动时,ListView中的CheckBox已停用

时间:2012-08-23 14:33:03

标签: android listview

我有一个ListView,其中每个ListItem的布局都有CheckBox。当CheckBox被激活并滚出可见区域时,它将被取消激活。我理解ListView重用Views,我必须在CheckBoxes方法中保存getView()的状态,但我有两个问题。

1 个答案:

答案 0 :(得分:1)

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

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

**编辑

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

  1. 如果convertView不为null,则通过调用convertView子节点上的相应方法将其状态保存到“viewholder”类。如果convertView IS为null,则尝试执行此操作,这是错误的。
  2. 如果convertView为null,则它不是循环视图,并且没有任何内容可以保存。
  3. 基本上,你的代码应该是这样的:

    @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;
    }