Android onItemLongClick+onCreateContextMenu实现长按ListItem弹出不同菜单


2010-09-07 18:29
    前一段时间做项目需要做一个效果:一个ListActivity,长按不同的item弹出的菜单不一样;如下图所示我们长按不同的item需要弹出不同标题的menu:
Android onItemLongClick+onCreateContextMenu实现长按ListItem弹出不同菜单_第1张图片     Android onItemLongClick+onCreateContextMenu实现长按ListItem弹出不同菜单_第2张图片
    长按事件可以使用ListView的setOnItemLongClick函数进行关联,但是在响应的onItemLongClick函数里面没办法调用ListView显示菜单。
    在Android的菜单分两种:options menu 、context menu 。(也有分三种的:options menu 、context menu、sub menu)其中options menu是和Activity相关联的,context menu 是和View关联。我们需要点击控件出现的菜单属于context menu ;但是context menu 只能通过setOnCreateContextMenuListener来进行关联。
     实现这个效果需要理解对ListView的item长按之后发生的事情:
    首先触发的是onItemLongClick函数,执行onItemLongClick操作,然后根据onItemLongClick的返回值判断是不是执行OnCreateContextMenuListener函数;如果onItemLongClick返回false,则会继续执行OnCreateContextMenuListener函数,否则返回true,忽略OnCreateContextMenuListener函数。
    因此我们可以在onItemLongClick的时候进行判断并且准备好OnCreateContextMenuListener中需要用到的数据,然后在OnCreateContextMenuListener中调用这些数据显示即可。


转:http://hi.baidu.com/dean_wang/blog/item/00b0e247d223b528cefca374.html   原文图片就这样。


listview问题:

 如果你的自定义ListViewItem中有Button或者Checkable的子类控件的话,那么默认focus是交给了子控件,而ListView的Item能被选中的基础是它能获取Focus,也就是说我们可以通过将ListView中Item中包含的所有控件的focusable属性设置为false,这样的话ListView的Item自动获得了Focus的权限,也就可以被选中了,也就会响应onItemClickListener中的onItemClick()方法,然而将ListView的Item Layout的子控件focusable属性设置为false有点繁琐,我们可以通过对Item Layout的根控件设置其android:descendantFocusability=”blocksDescendant”即可,这样Item Layout就屏蔽了所有子控件获取Focus的权限,不需要针对Item Layout中的每一个控件重新设置focusable属性了,如此就可以顺利的响应onItemClickListener中的onItenClick()方法了。


你可能感兴趣的:(android,ListView,layout,button,menu,2010)