Android getView()工作不正常
请看代码:-Android getView()工作不正常,android,listview,android-listview,listadapter,Android,Listview,Android Listview,Listadapter,请看代码:- @Override public View getView(int position, View convertView, ViewGroup parent) { View row = convertView; if (row == null) { LayoutInflater inflater = ((Activity) mContext).getLayoutInflater(); row = inflater.inf
@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为:--
现在我的问题是,一旦我选中列表视图和滚动列表视图中的几个复选框,就会自动选中许多其他复选框
我知道getView中存在问题,但我不知道在哪里
如果不重用convert视图,问题也会得到解决。但这是一个愚蠢的想法
任何想法……如果重用旧的
视图,则必须显式设置复选框的状态,这是因为ListView循环使用视图。从本质上讲,它重用了一些离开屏幕的视图,使新视图出现在屏幕上,以提高性能。有两种处理方法:
在返回行之前设置视图的值。例如,您可以设置nameOfCountry
,以及在返回视图
行之前是否选中复选框。但要做到这一点,您需要跟踪检查的内容
不要使用convertview
,每次只需为新视图充气即可。这可能会导致性能下降,但只要列表不太长,就不应该太引人注目(至少在我的经验中是这样)。只需输入convertview
值
阅读有关视图回收的信息。重用视图时,需要设置正确行的属性。正在使用/扩展哪种类型的适配器?BaseAdapter,ArrayAdapter?您还需要示例代码吗?如果你愿意,我可以放一些进去。好吧,我做了一些我想做的事情,但是如果你能分享一些代码,我会很感激的……)
<?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" />