这就是我想要做的事情:
在我的主Activity中,我有一个带有自定义适配器的ListView,因为我的ListView项应包含TextView和CheckBox。当我长按一个项目时,我想在ActionBar中使用上下文动作模式并突出显示所选的ListView项目。
这就是我的所作所为:
我为自定义适配器执行了此Tutorial,为ActionMode执行了此Tutorial。两者都很好。我能够与我的适配器和ListView底层的数据库进行交互。我应该提一下,我在自定义适配器类中实现了ActionMode的所有内容。
这是什么不起作用:
虽然我能够删除与ListView项目中TextView内容相对应的数据库条目,但我无法弄清楚如何突出显示所选的ListView项目。
答案 0 :(得分:3)
我终于设法找到了解决方案。我采取了几个不同的步骤:
与代码相关的步骤:
我在我的Activity中为我的ListView设置了一个OnItemLongClickListener。从那里我触发ActionMode并保存项目TextView中的文本(itemNames
是List<String>
设置到我的适配器,deleteString
是我的Activity的类属性):
deleteString = itemNames.get(_postion);
但是这些步骤只是为了让我的代码正常工作,因为我必须通过XML进行更改。
与XML相关的步骤:
android:clickable="true"
和android:longClickable="true"
(也许longClickable已经足够了,只是为了确定;-))android:background="@drawable/my_selector"
这样我实现了以下目标:
我唯一没有通过XML工作的是在ActionMode处于活动状态时保持我的ListView项目突出显示,所以我这样做了
_view.setBackgroundResource(android.R.color.holo_blue_dark);
在我的Activity类的ListView的OnItemLongClickListener中(不要忘记在onDestroyActionMode(ActionMode _mode)
的{{1}}中重绘或刷新ListView
瞧!我希望这对你们中的一些人有所帮助!我花了几天时间和很多研究。
这里是我的ListView项目布局和我的选择器布局的代码示例:
ActionMode.Callback
我的选择器:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/my_selector"
android:clickable="true"
android:longClickable="true" >
<CheckBox
android:id="@+id/checkBox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="6dp" >
</CheckBox>
<TextView
android:id="@+id/shoppingListItemName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_marginLeft="10dp"
android:layout_toLeftOf="@id/checkBox"
android:gravity="center_vertical"
android:minHeight="?android:attr/listPreferredItemHeightSmall"
android:textAppearance="?android:attr/textAppearanceListItemSmall"
android:textIsSelectable="true" >
</TextView>
</RelativeLayout>
答案 1 :(得分:0)
您可以在列表行布局的背景可绘制中设置android:state_activated = true
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_activated="true">
<layer-list >
<!-- <item >
<color android:color="#ff00aa00"/>
</item> -->
<item>
<shape android:shape="rectangle">
<solid android:color="#aa58BAED"/>
<corners android:radius="3px"/>
</shape>
</item>
</layer-list>
</item>
<item >
<color android:color="#00000000"/>
</item>
</selector>
但它只适用于android api&gt; Api 11
答案 2 :(得分:0)
我遇到了这个问题,因为我遇到了同样的问题,即想点击并长按一下我的列表视图项目。这适合我。 Android Multi Choice Mode Listener with Custom Adapter