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" />