0

我使用具有多项选择的列表视图,并覆盖了里面的搜索方法。我对项目有问题,因为在滚动期间项目的位置发生了变化。我认为问题来自布局,因为当布局仅包含列表视图时,它可以正常工作。但是,当我使用下面的布局时,滚动期间检查的项目的位置会发生变化。

有人可以帮忙吗?

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:orientation="vertical"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent">

    <EditText
        android:id="@+id/editText1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_toLeftOf="@+id/button1" />


    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:text="Button" />

    <ListView
        android:id="@+id/MyListView"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/editText1" />

</RelativeLayout>
4

1 回答 1

0

您需要在适配器中设置一个对象来跟踪复选框的状态。您还没有显示您的适配器代码,所以我将从我的一些代码中提取一个示例(这是使用光标,它可以适应 ArrayAdapter)

在自定义适配器中设置一个数组:

private Cursor c; 
public static int[] checked; 

在您的构造函数中,将光标设置为本地 var 并调用一个方法:

CursorAdapter_EditText.c = c; 
initializeChecked(); 

方法(使用 0 = 未选中):

public static void initializeChecked() { 
    checked = new int[c.getCount()]; 
    int i = 0; 
    while (i < c.getCount()) { 
        checked[i] = 0; 
        i++; 
    } 
} 

在您getView使用数组来设置复选框状态:

checkBox = (CheckBox) view.findViewById(R.id.CheckBox); 
if (checked(position) == 0) { 
    checkBox.setChecked(false); 
} else { 
    checkBox.setChecked(true); 
}  

当您更改复选框的状态时,您还需要添加代码checkBox.setOnCheckedChangeListener以更改数组中的状态。

于 2012-05-30T14:08:20.583 回答