【问题标题】:ListView filled with CheckBoxes -- they go madListView 充满了 CheckBox —— 他们发疯了
【发布时间】:2010-01-18 13:37:14
【问题描述】:

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

这真的很简单。我制作了一个充满 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-Array 中有足够的字符串,并且您可以滚动列表,您将看到,如果您选中一个 CheckBox 并向下滚动,则会自动选中另一个 CheckBox。如果您选中更多复选框,则会自动选中更多复选框,或者取消选中已选中的复选框。

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

看起来是个bug??

【问题讨论】:

    标签: java android


    【解决方案1】:

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

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

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

    另外,请考虑使用CheckedTextView class 而不是CheckBox

    【讨论】:

    • 要使用复选框选择模式, - 使用 R.layout.simple_list_item_checked 作为您提供给 ArrayAdapter 的布局 - 将 listView 选择模式设置为 CHOICE_MODE_MULTIPLE
    • 谢谢,setChoiseMode(ListView.CHOISE_MODE_MULTIPLE) 就像一个魅力。如何使用 SimpleExpandableListAdapter 将布尔值绑定到 Checkboxes/CheckedTextViews 的状态?..
    • 不太确定你想做什么。在ListView 上调用getCheckedItemPositions() 不提供什么?
    • 我指的是您的陈述“如果您的适配器中的数据与视图中 CheckBox 的状态之间没有链接......”我想我可以启动 CheckBoxes 的状态/ CheckedTextView 在我的适配器中,就像我处理他们的标签一样。
    • 您必须使用自定义适配器而不是 SimpleExpandableListAdapter
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-02
    • 2014-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多