ListView充满了CheckBoxes - 他们发疯了

时间:2010-01-18 13:37:14

标签: java android

我需要你的帮助。我是Android的新手,使用最新的2.1 SDK在Eclipse中开发。

这很简单。我创建了一个填充了Checkbox小部件的ListView。

我的代码:

public class HelloAndroid extends Activity {

    static final String[] COUNTRIES = new String[] {
        "Afghanistan", "Albania", "Algeria", "American Samoa", "Andorra",
        "Angola", "Anguilla", "Antarctica", "Antigua and Barbuda", "Argentina",
        "Armenia", "Aruba", "Australia", "Austria", "Azerbaijan",
        "Bahrain", "Bangladesh", "Barbados", "Belarus", "Belgium"}; 

    protected ListView myList;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        myList = (ListView)findViewById(R.id.myList);
        ArrayAdapter<String> myAdapter = new ArrayAdapter<String>(this, R.layout.row, R.id.myBox, COUNTRIES); 
        myList.setAdapter(myAdapter);
    }
}

这是Layout-XML文件(row.xml),由一个复选框组成:

<?xml version="1.0" encoding="utf-8"?>
<CheckBox
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/myBox"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceLarge"/>

现在,如果COUNTRIES - 数组中有足够的字符串并且您可以滚动列表,您将看到,如果您选中一个CheckBox并向下滚动,则会自动检查另一个CheckBox。如果您再检查一些框,则会自动检查更多框,或者检查未选中的框。

我也尝试android:focusable="false"用于CheckBox(在XML中)以及android:focusableInTouchMode,如某些类似的线程中所述,但似乎没有任何帮助......

看起来像是一个错误?

1 个答案:

答案 0 :(得分:4)

正在发生的事情是,Android正在重复使用它创建的CheckBox视图来显示列表以节省内存。 Android不会为列表中的每个项目创建新的CheckBox,而是创建足够的内容来填充屏幕,更新它们以显示当前可见项目的相关数据。

如果您的适配器中的数据与视图中CheckBox的状态之间没有链接,那么看起来很多CheckBox会被链接,实际上它与具有不同标签的CheckBox相同。

您是否设置了ListView的{​​{3}}?如果这样做,这将告诉ListView跟踪您选择的内容。

另外,请考虑使用choiceMode attribute代替CheckBox