查看代码: -
@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存在问题,但我无法确定哪里....
如果我不重用转换视图,问题也解决了。但这是一个愚蠢的想法......
任何想法......
答案 0 :(得分:1)
如果您重复使用旧版View
,则必须明确设置复选框的状态。
答案 1 :(得分:1)
这是因为ListView可以回收视图。从本质上讲,它重用了屏幕上的一些视图,使屏幕上的新视图有助于提高性能。有两种方法可以解决这个问题:
在返回行之前设置视图的值。例如,您可以设置nameOfCountry
以及是否在return view
行之前选中复选框。但要做到这一点,你需要跟踪检查的内容。
请勿使用convertview
,并且每次只是为新视图充气。这可能会导致性能下降,但只要列表不长,就不应该太明显了(至少根据我的经验)。只需igonre convertview
值