API 11 之前的 MultiChoiceMode

Posted

技术标签:

【中文标题】API 11 之前的 MultiChoiceMode【英文标题】:MultiChoiceMode before API 11 【发布时间】:2012-07-20 09:31:12 【问题描述】:

我使用 ActionBarSherlock 在我的 android 应用程序中实现 ActionMode。 使用 ABS 可以在 API 11 之前构建一个 ActionMode,但简单的方法是: listView.setMultiChoiceModeListener( new MultiChoiceModeListener() ... 不适用于 API 11 之前的应用。 有没有人在 API 11 之前构建动作模式上下文菜单的好方法? 我想长按一个列表项并启动 ActionMode,我可以在其中单击多个项目。只需单击一下,我就会显示列表项的详细站点。 我使用registerForContext() 方法,但这只是简单而长按。

有没有人给我一个好的建议。

编辑 我的问题的解决方案如下:在长项目上单击我激活操作模式并将其保存在变量中。在 on item click 方法中,我实现了一个 if-else 语句:

if( actionMode == null )

   // open new activity or update second fragment
   showDetails( itemPosition );

else

   // update ui or close CAB if no item selected
   showCAB( itemPosition );

方法showCAB(position)更新selectedItem计数,高亮item背景等。

【问题讨论】:

【参考方案1】:

好的,我今天才这样做,感谢那个网站:http://www.miximum.fr/tutos/849-porting-the-contextual-anction-mode-for-pre-honeycomb-android-apps

基本上,您只需将 ListView ChoiceMode 设置为 ListView.CHOICE_MODE_MULTIPLE,设置一个 onItemClickListener 来检查 ListView 上检查了哪些项目,并创建一个实现 ActionMode.Callback 的私有类来管理上下文 ActionBar .

我让您继续阅读该博文,以查看所有详细信息以及一些代码!

【讨论】:

感谢您的回答。我昨天也找到了这个页面并实施了解决方案。我将 onItemClickListener 更改为 onItemLongClickListener 并且运行得不太好。短按一个项目后,我可以启动 ActionMode,关闭我打开的活动,然后再次长按该项目。解决方案并不完美,但开始时很好。 如果我能很好地理解您的问题,是不是只需单击您的 ListView 的项目,它仍然会打开您的活动?然后,在您的onItemLongClickListener 上,您可以将listView onItemClickListener 设置为null,这样它就不会打开任何活动。一定要把ModeCallback类的onDestroyActionMode上的onItemClickListener设置回原来的onItemClickListener(可以保存在变量中) 在调用 onItemClick 方法之前,事件传递了 onItemLongClick 方法。此方法返回一个布尔值,因此如果我返回 true,则事件已处理且未到达 onItemClick 方法。如果我返回 false 我没有处理长点击并进行其他类型的点击。我在其他一些问题中发现了这一点,但您的解决方案也是可能的。我今天晚些时候测试一下。 是的,我说的是,如果您希望能够简单地单击项目以选择它们(在第一次长按之后),您需要从 ListView 中删除 onItemClickListener,所以它不会触发启动活动事件。但是,是的,您还必须使用 onItemLongClick 返回 true 才能使用该事件,并且在您想要进行长按时不要触发简单的点击【参考方案2】:

您也可以查看Google I/O 2012 App。它是开源的,使用 ActionBarSherlock。他们开发了一个兼容版本的 ActionMode 相关类,可以在 ABS 和 pre-honeycomb 设备上正常工作。

特别是看一下:

SessionsFragment class : 显示ActionMode兼容版本的用法 util.actionmodecompat 包:包含兼容ActionMode 课程

基本上,就像 ABS 一样,它们在可用时使用 ActionMode 的本机实现,并回退到旧设备上的自定义实现。

希望对你有帮助!

【讨论】:

您的信息真的很有帮助,谢谢。我发现这个文件在使用 appcompat v7 包中的 ActionMode 和 ActionBarActivity 时也很有帮助。 iosched.googlecode.com/git/android/src/main/java/com/google/…

以上是关于API 11 之前的 MultiChoiceMode的主要内容,如果未能解决你的问题,请参考以下文章

api级别11之前的Android datepicker min max date

是否必须在 2018 年 6 月 11 日之前通过信用卡信息启用计费帐户才能继续访问 Google Maps API?

是否可以在显示本地通知之前触发 api 调用?

在完成 API Nodejs 之前提示用户警告

选项在 REST API 调用之前调用元

reddit api 分页:之前总是为空