0

看代码:-

    @Override
public View getView(int position, View convertView, ViewGroup parent) {

    View row = convertView;

    if (row == null) {
        LayoutInflater inflater = ((Activity)  mContext).getLayoutInflater();
        row = inflater.inflate(R.layout.country_row, parent, false);
    }

    return row;
}

国家行 XML 是:--

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="match_parent"
  android:orientation="horizontal"
  android:weightSum="1" >

<TextView
    android:id="@+id/nameOfCountry"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="0.8"
    android:text="Country" />

<CheckBox
    android:id="@+id/checkBox"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="0.2"
    android:gravity="right" />

现在我的问题是,一旦我检查了列表视图中的几个复选框并滚动列表视图,许多其他复选框就会自动选中....

我知道 getView 有问题,但我不知道在哪里....

如果我不重用转换视图,问题也会得到解决。但这是一个愚蠢的想法......

有什么想法吗.....

4

2 回答 2

1

如果您重用旧的View.

于 2012-12-27T17:10:44.163 回答
1

那是因为 ListView 会回收视图。从本质上讲,它重用了一些屏幕外的视图,使新的视图出现在屏幕上以帮助提高性能。有 2 种处理方法:

  1. 在返回行之前设置视图的值。例如,您将设置nameOfCountry以及是否在该return view行之前选中复选框。但是,要做到这一点,您需要跟踪检查的内容。

  2. 不要使用convertview并且每次都膨胀一个新视图。这可能会导致性能下降,但只要列表不太长,它就不应该太引人注目(至少根据我的经验)。简单地忽略convertview价值

于 2012-12-27T17:11:54.197 回答