0

要在 Android Honeycomb 及更高版本上使用上下文操作栏,我通常会检查是否为SDK_INT11 或更高版本,然后继续mListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);

现在,通过 ActionBarSherlock,我正在尝试将其移植到旧设备上。现在我使用CHOICE_MODE_MULTIPLE而不是CHOICE_MODE_MULTIPLE_MODAL,在里面OnItemLongClickListener,我设法调用getSherlockActivity().startActionMode(myActionModeCallback);

问题是,当我第一次长按 ListView 中的一个项目时,上下文操作栏会正确显示。

但是当我点击另一个 ListView 项目时,该项目被选中,然后它的点击监听器被触发。(我使用那个监听器,所以当用户点击一个项目时,它会打开一个新的活动,用户可以在其中编辑项目,所以在这种情况下,项目被选中,这个新活动立即开始,并破坏了我的上下文操作栏)

它不应该发生,但我想我做错了什么。我曾考虑将OnListItemClick侦听器设置为 null,直到我调用ActionMode.finish()可以将其恢复为前一个侦听器的位置,但我相信必须有一种更清洁的方法来做到这一点。

4

1 回答 1

0

据我了解您的问题,这是适合您的解决方案。

您可以先检查是否有选定的项目,如

boolean hasCheckedItems = yourListAdapter.getSelectedCount() > 0;

然后您可以检查以下情况

if (hasCheckedItems && ActionModeObject == null)
//there are some selected items, start the ActionMode 

else if (!hasCheckedItems && ActionModeObject != null)
// there no selected items, finish the ActionMode
ActionModeObject.finish();

if (ActionModeObject != null)
//Action Button Clicked
于 2013-08-17T19:18:26.147 回答