android,带有复选框的列表视图

Posted

技术标签:

【中文标题】android,带有复选框的列表视图【英文标题】:android, listview with checked box 【发布时间】:2016-03-30 21:02:45 【问题描述】:

我已经阅读了一些关于这个问题的帖子,但我仍然无法让它发挥作用。我想要一个带有复选框的列表视图。这是我的activity_choose_songs.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_
    android:layout_>

    <TextView
        android:id="@+id/songs_to_choose"
        android:layout_
        android:layout_
        android:text="@string/sd_cards_playlist"
        android:textStyle="bold"
        android:gravity="center"
        android:textSize="30sp"
        android:paddingTop="5dp"
        android:paddingBottom="5dp"
        />

    <ListView
        android:id="@android:id/list"
        android:layout_
        android:layout_
        android:listSelector="@drawable/list_selector"
        android:divider="#242424"
        android:dividerHeight="1dp"
        android:layout_below="@+id/songs_to_choose">
    </ListView>

</RelativeLayout>

这是特定项目的布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_
    android:layout_
    android:gravity="center"
    android:padding="5dp"
    android:background="@drawable/list_selector">

    <CheckedTextView
        android:id="@+id/checkedTextView"
        android:layout_
        android:layout_
        android:textSize="16sp"
        android:padding="10dp"
        android:gravity="center"
        android:drawableStart="?android:attr/listChoiceIndicatorMultiple"
        android:textColor="#f3f3f3" />

</LinearLayout>

这是我希望显示此列表视图的活动中onCreate() 方法的摘录:

ListAdapter adapter = new SimpleAdapter(getApplicationContext(),chosenSongsListData,
                R.layout.playlist_checked_item,new String[]"songTitle",new int[]R.id.checkedTextView);

        setListAdapter(adapter);
        ListView lw = getListView();

        lw.setItemsCanFocus(false);
        lw.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE);

        lw.setOnItemClickListener(new AdapterView.OnItemClickListener() 
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) 

            
        );

然而,当我开始活动并尝试检查它时,它看起来像(屏幕处于按下状态):

我的方法有什么问题?

【问题讨论】:

意思是,有什么问题,没有检查? 我建议改用 RecyclerView,您可以分别为项目和复选框设置点击侦听器,也可以查看此答案***.com/a/10529176/2146871 【参考方案1】:

我认为问题在于您的项目视图中有一个LinearLayout。它不能将其状态传播给孩子。

我认为您有两个选择。

第一个是删除LinearLayout。您的视图现在没有实现Checkable。当您删除它时,CheckedTextView 应该可以工作。

第二个选项是使用CheckedLinearLayout 并让你的孩子拥有这个属性:

  android:duplicateParentState="true"`

您可以在线找到CheckedLinearLayout 的实现。

【讨论】:

【参考方案2】:

您必须在您的项目点击监听器中执行此操作,下面给出的示例代码。

       lw.setOnItemClickListener(new AdapterView.OnItemClickListener() 
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) 

            CheckBox check = (CheckBox) view.findViewById(R.id.checkedTextView);

            check.toggle(); //check or un-check the checkbox

            
        );

【讨论】:

永远不要手动更改视图的状态。只有getView 方法应该改变它。这将无法在重新创建视图的位置进行滚动和配置更改。 @tasomaniac ,是的,感谢您的评论。我只是建议他,因为他提到“无法通过单击列表项来选中复选框”,我认为这是最简单的方法。我没有考虑保留状态:)。

以上是关于android,带有复选框的列表视图的主要内容,如果未能解决你的问题,请参考以下文章

带有复选框和单选按钮的 Android 列表视图

Android:如何在列表视图中自动显示带有复选框的 Sqlite 数据库

带有光标适配器滚动问题的android列表视图

如何使用复选框将Android联系人添加到列表视图中[重复]

Android - 通过复选框使用自定义适配器从列表视图中获取项目

单击按钮时如何在android中获取带有ListView值的复选框,EditText?