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