我终于设法自己找到了解决方案。我采取了几个不同的步骤:
代码相关步骤:
我将所有与 ActionMode 相关的代码从我的适配器类移到了我的活动类。在此之前,我通过在 ListView 项目中的 TextView 上使用 OnLongClickListener 触发了操作模式,因为那时我不知道如何使 TextView 的文本可用于 ActionMode(我希望能够通过单击图标将其删除在操作栏中)。当您在其中一个 ListView 项目上使用 CLickListener 时,它有点“阻止”您在 Activity 中设置的 ListView 项目的 OnClickListener。不要那样做!!!
我在我的活动中为我的 ListView 设置了一个 OnItemLongClickListener。从那里我触发 ActionMode 并像这样从项目的 TextView 保存文本(itemNames
是List<String>
我的适配器的集合,deleteString
是我的 Activity 的类属性):
deleteString = itemNames.get(_postion);
但这些步骤只是为了让我的代码按预期工作,因为我必须通过 XML 进行更改。
XML相关步骤:
- 我必须从我的 ListView 项目主布局中删除背景属性
- 我必须在我的外行布局中添加以下属性:
android:clickable="true"
并且android:longClickable="true"
(也许 longClickable 已经足够了,只是为了确定 ;-))
- 我必须创建一个自己的可绘制选择器并将其设置为我的 ListView 项目布局的背景:
android:background="@drawable/my_selector"
通过这种方式,我实现了以下目标:
- 我的 Activity 中有一个带有自定义布局(TextView + CheckBox)和自定义适配器的 ListView
- 我可以在 CheckBox 上使用 OnCheckedChangeListener
- 我可以通过长按我的 ListView 项目来激活 ActionMode 并到达 TextView 的内容以进行进一步处理
- 当我单击它时,我在我的 ListView 项目上获得了默认的 holo_blue_light 背景突出显示(我在我的应用程序中使用带有深色操作栏的 Holo 主题灯)
我没有通过 XML 工作的唯一一件事是在 ActionMode 处于活动状态时保持我的 ListView 项目突出显示,所以我这样做了
_view.setBackgroundResource(android.R.color.holo_blue_dark);
在我的 Activity 类中我的 ListView 的 OnItemLongClickListener 中(不要忘记重绘或刷新你的onDestroyActionMode(ActionMode _mode)
ListView ActionMode.Callback
)
瞧!我希望这可能对你们中的一些人有所帮助!花了我几天的时间和大量的研究。
这是我的 ListView 项目布局和选择器布局的代码示例:
<?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>
我的选择器:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<layer-list>
<item>
<shape android:shape="rectangle">
<solid android:color="@android:color/holo_blue_light" />
</shape>
</item>
</layer-list>
</item>
<item>
<color android:color="#00000000" />
</item>
</selector>