0

我有一个用于该行的类,它将RelativeLayout一些布局扩展并膨胀到自我。CheckBox还设置了检查状态侦听器。

public class LayersListRow extends RelativeLayout {         

  public LayersListRow (Context context, final GITuple tuple) {
    super(context);
    LayoutInflater.from(context).inflate(R.layout.layers_list_item, this, true);
        ...

    CheckBox checkbox = (CheckBox)findViewById(R.id.layers_list_item_switch);

    checkbox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
        public void onCheckedChanged (CompoundButton buttonView, boolean isChecked) {
        ...
        }
    });
  }
    ...
}

我有一个 custom ArrayAdapter,里面装满了这个类的一些对象。我也想将它们用作视图。

public class LayersAdapter extends ArrayAdapter<LayersListRow> {

    @Override
    public View getView (int position, View convertView, ViewGroup parent) {
        return getItem(position);
    }

    public LayersAdapter (Context context, int resource, int textViewResourceId) {
        super(context, resource, textViewResourceId);
    }
}

但是当我将此适配器设置为我ListViewCheckBox监听器时不起作用。但是对于向下滚动显示的项目,它工作正常。

如果我return getItem(position);getView方法中替换为

if (null == convertView)
  return getItem(position);

return convertedView;

然后对于列表侦听器中最初可见的所有项目都很好,但是当我尝试滚动时,我得到了错误的项目(又是第一个),ListView冻结并且没有响应。

为什么会发生这种情况,我应该如何让它正常工作?

4

1 回答 1

0

当你使用这个

if (null == convertView)
  return getItem(position);

return convertedView;

视图被重用。因此,当您滚动第一次显示的视图时,将再次显示。

我建议你看看我在这篇文章中写的答案。如果您无法关注它,请在此处发表评论。

从 ListView 获取选中的 Listitems 并将其传递给另一个活动

于 2012-12-28T15:28:08.013 回答