Listview多选

时间:2012-05-30 11:08:37

标签: android listview

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

有人可以帮忙吗?

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

1 个答案:

答案 0 :(得分: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中添加代码以更改数组中的状态。