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:如何在列表视图中自动显示带有复选框的 Sqlite 数据库
如何使用复选框将Android联系人添加到列表视图中[重复]