- 浏览: 506345 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (200)
- java基础 (30)
- ajax (19)
- 乱写 (5)
- groovy (2)
- db (8)
- gwt (0)
- jee (2)
- 我关注的开源 (1)
- RIA AIR (1)
- spring (11)
- lucene (0)
- 工具 (10)
- 百科 (2)
- linux (6)
- android (40)
- 移动开发 (21)
- 代码片断 (15)
- tomcat (1)
- css (1)
- html5 (2)
- jquery (2)
- playframework (3)
- web (2)
- nio (3)
- design (1)
- nosql (3)
- 日志 (12)
- mysql (4)
- 图表 (1)
- python (3)
- ruby (1)
- git (0)
- hibernate (1)
- springboot (1)
- guava (1)
- mybatis (0)
- 工作问题 (3)
- php (1)
最新评论
-
linzm1990:
踩了很多坑啊。。。。
hibernate @Nofound 与@ManyToOne fetch lazy的问题 -
Ccccrrrrrr:
...
转: Spring boot 文件上传 -
rmzdb:
兄弟,你这个东西,在ie内核的浏览器,貌似不识别 文件名
工作问题:http下载文件,中文文件名在firefox下乱码问题 -
107x:
问题解决了,谢谢!
工作问题:http下载文件,中文文件名在firefox下乱码问题 -
klxqljq:
额鹅鹅鹅
android布局实现头尾固定, 中间多余内容可以滚动
ListView的长按菜单___源码分析
Android的listview可以长按弹出来一个菜单。
今天就跟了下代码大概看了下弹出菜单的流程。
我们实现一个菜单长按步骤通常如下:
1.弹出菜单的生成
如果控制listview长按应该生成什么样的菜单。
a、生成一个OnCreateContextMenuListener的接口对象
该接口定义如下:在view.java中
b、实现该接口的onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)函数
在这里,根据menuInfo,通常先转换为AdapterContextMenuInfo,定义如下,在adapterview.java中定义
通过获取MenuItem 的postion进而获取该listitem的信息,进而来决定加入什么样的菜单。
c、将该接口对象设置为listview的listener
2、菜单选择事件的响应
实现该listview的单击响应事件
根据不同的MenuItem的id来进行不同的操作。
二、onCreateContextMenu的调用
那么OnCreateContextMenuListener的onCreateContextMenu是在什么时候调用的呢
是在view.java中createContextMenu函数中调用。
view.createContextMenu是在ContextMenubuilder的show函数调用
而ContextMenubuilder的show函数分别在
PhoneWindow和MidWindow的showContextMenuForChild调用。
再往下今天就没再跟下去了。
三、onCreateContextMenu的生成
在onCreateContextMenu(menu, this, menuInfo)时,传入一个MenuInfo,我们就根据这个MenuInfo来创建响应的菜单。
那这个MenuInfo是怎样生成的呢?
1、首先在View中createContextMenu,调用ContextMenuInfo menuInfo = getContextMenuInfo();
但是getContextMenuInfo()就是返回一个空,得不得我们的数据。
所以,一个view要想能够生成自己的MenuInfo,必须要重新getContextMenuInfo这个函数。
2、在上面的步骤中,我们没有涉及到该函数的重写 ,是因为ListView的父类中,已经重写了改函数 。如下
而这个成员变量的赋值如下:
就是我们在构造菜单时候所用到的ContextMenuInfo.
如果我们要给其它自己定义的View,响应长按菜单。这时候我们就需要重写该View的getContextMenuInfo()。
根据View当前状态生成不同的ContextMenuInfo,进而决定应该弹出什么样的菜单。
Android的listview可以长按弹出来一个菜单。
今天就跟了下代码大概看了下弹出菜单的流程。
我们实现一个菜单长按步骤通常如下:
1.弹出菜单的生成
如果控制listview长按应该生成什么样的菜单。
a、生成一个OnCreateContextMenuListener的接口对象
该接口定义如下:在view.java中
public interface OnCreateContextMenuListener { /** * Called when the context menu for this view is being built. It is not * safe to hold onto the menu after this method returns. * * @param menu The context menu that is being built * @param v The view for which the context menu is being built * @param menuInfo Extra information about the item for which the * context menu should be shown. This information will vary * depending on the class of v. */ void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo); }
b、实现该接口的onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)函数
在这里,根据menuInfo,通常先转换为AdapterContextMenuInfo,定义如下,在adapterview.java中定义
public static class AdapterContextMenuInfo implements ContextMenu.ContextMenuInfo { public AdapterContextMenuInfo(View targetView, int position, long id) { this.targetView = targetView; this.position = position; this.id = id; } /** * The child view for which the context menu is being displayed. This * will be one of the children of this AdapterView. */ public View targetView; /** * The position in the adapter for which the context menu is being * displayed. */ public int position; /** * The row id of the item for which the context menu is being displayed. */ public long id; }
通过获取MenuItem 的postion进而获取该listitem的信息,进而来决定加入什么样的菜单。
c、将该接口对象设置为listview的listener
setOnCreateContextMenuListener(l)
2、菜单选择事件的响应
实现该listview的单击响应事件
public boolean onContextItemSelected(MenuItem item) {}
根据不同的MenuItem的id来进行不同的操作。
二、onCreateContextMenu的调用
那么OnCreateContextMenuListener的onCreateContextMenu是在什么时候调用的呢
是在view.java中createContextMenu函数中调用。
view.createContextMenu是在ContextMenubuilder的show函数调用
而ContextMenubuilder的show函数分别在
PhoneWindow和MidWindow的showContextMenuForChild调用。
再往下今天就没再跟下去了。
三、onCreateContextMenu的生成
在onCreateContextMenu(menu, this, menuInfo)时,传入一个MenuInfo,我们就根据这个MenuInfo来创建响应的菜单。
那这个MenuInfo是怎样生成的呢?
1、首先在View中createContextMenu,调用ContextMenuInfo menuInfo = getContextMenuInfo();
但是getContextMenuInfo()就是返回一个空,得不得我们的数据。
所以,一个view要想能够生成自己的MenuInfo,必须要重新getContextMenuInfo这个函数。
2、在上面的步骤中,我们没有涉及到该函数的重写 ,是因为ListView的父类中,已经重写了改函数 。如下
@Override protected ContextMenuInfo getContextMenuInfo() { return mContextMenuInfo; }
而这个成员变量的赋值如下:
private boolean performLongPress(final View child,final int longPressPosition, final long longPressId) { boolean handled = false; if (mOnItemLongClickListener != null) { handled = mOnItemLongClickListener.onItemLongClick(AbsListView.this, child, longPressPosition, longPressId); } if (!handled) { mContextMenuInfo = createContextMenuInfo(child, longPressPosition, longPressId); handled = super.showContextMenuForChild(AbsListView.this); } if (handled) { performHapticFeedback(HapticFeedbackConstants.LONG_PRESS); } return handled; } ContextMenuInfo createContextMenuInfo(View view, int position, long id) { return new AdapterContextMenuInfo(view, position, id); } ContextMenuInfo createContextMenuInfo(View view, int position, long id) { return new AdapterContextMenuInfo(view, position, id); }
就是我们在构造菜单时候所用到的ContextMenuInfo.
如果我们要给其它自己定义的View,响应长按菜单。这时候我们就需要重写该View的getContextMenuInfo()。
根据View当前状态生成不同的ContextMenuInfo,进而决定应该弹出什么样的菜单。
评论
1 楼
mm4409092
2012-05-05
android listview综合使用示例_结合数据库操作和listitem单击长按等事件处理
http://blog.csdn.net/lk_blog/article/details/7537200
http://blog.csdn.net/lk_blog/article/details/7537200
发表评论
-
android listview
2012-07-13 17:37 930ListView与Button的共存问题解决, 解决在list ... -
米聊所采用的一些技术
2012-01-31 09:52 2085nginx upstream fallback 设置 up ... -
演化理解 Android 异步加载图片
2011-11-09 09:55 902LinearLayout 布局,其下放了5个ImageView ... -
android常用颜色
2011-11-07 08:49 1284常用颜色值: 可以完美的颜色比对的网站: http://w ... -
dialog,activity 屏蔽Home键详解
2011-11-03 09:39 0http://www.iteye.com/topic/1116 ... -
android SlidingDrawer example
2011-11-03 09:35 0http://disanji.net/2010/12/16/a ... -
play flash swf file in android with webview
2011-11-03 09:34 0http://androidforums.com/applic ... -
AnimationDrawable 在Dialog中不能动画的原因(转)
2011-11-03 09:33 1303原来在dialog的onCreate onStart调用的时候 ... -
Free Android UI library & component roundup
2011-11-03 09:27 1149http://java.dzone.com/articles/ ... -
Android Fundamentals: Scheduling Recurring Tasks
2011-11-03 09:26 984http://mobile.tutsplus.com/tuto ... -
Android ListView pull up to refresh 改造(转)
2011-11-03 09:25 2099转自: http://dengyin2000.iteye.co ... -
Android中dp和px之间进行转换
2011-11-03 09:02 2267在xml布局文件中,我们既可以设置px,也可以设置dp(或者d ... -
view的setTag() 和 getTag()应用
2011-10-31 12:19 29935View中的setTag(Onbect)表示给View添加一个 ... -
使用getIdentifier()获取资源Id
2011-10-31 12:15 8461使用getIdentifier()获取资源Id int i ... -
让你的Android程序兼容多种分辨率
2011-10-24 09:20 1028http://www.android123.com.cn/an ... -
andr菜单
2011-10-24 09:18 1212Android 菜单 菜单分为两种:系统菜单和上下文菜单。 ... -
Android 长按显示上下文菜单代码
2011-10-24 09:14 5942Android 长按显示上下文 ... -
Android Asynchronous Http Client
2011-10-19 10:27 2909转自: loopj.com/android-async-htt ... -
Android canvas.drawBitmap实现透明效果
2011-09-02 14:22 23441以下是针对,canvas.drawBitmap方法实施透明效 ... -
android资源别名
2011-08-30 14:24 2323详细请参考: http://developer.android ...
相关推荐
这个"安卓Andriod源码——ContextMenu上下文选项菜单,长按后跳出菜单.zip"文件很可能是包含了一个示例项目,用于演示如何在Android应用中实现ContextMenu的功能。下面我们将深入探讨ContextMenu的实现机制、使用...
这个压缩包“安卓Android源码——ContextMenu 上下文选项菜单,长按后跳出菜单.rar”包含了实现这一功能的源代码示例,名为ContextMenuDemo,下面将详细介绍其背后的原理和实现方式。 首先,理解ContextMenu的基本...
这个压缩包文件"安卓Android源码——ContextMenu上下文选项菜单,长按后跳出菜单.zip"包含了一个名为"ContextMenuDemo"的示例项目,用于演示如何在应用程序中实现`ContextMenu`。 首先,让我们理解`ContextMenu`的...
通过分析源码,你可以了解到ContextMenu的生命周期以及它如何与Activity和View协同工作。 此外,了解`ContextMenu.ContextMenuInfo`接口也很关键,这个接口提供了关于触发ContextMenu的视图的额外信息,比如在...
在博客中,作者可能对比了TextView和ListView在处理滑动手势时的差异,分析了在不同场景下哪种组件更适合添加特定手势,以及如何通过源码分析优化手势识别的性能。同时,博客可能还涉及了一些实用工具,如...
这个"Android高级应用源码-实现列表多选的DEMO.zip"应该包含了一个完整的示例项目,展示了如何在Android中实现ListView或者RecyclerView的多选功能。下面将详细讲解这一知识点。 1. **ListView与RecyclerView**: ...
通过分析源码,开发者可以深入理解上下文菜单的工作机制,学习如何根据需要添加自定义逻辑,比如添加菜单项的图标、处理点击事件等。 此外,源码中可能会涉及其他关键概念,例如事件监听、数据绑定、UI更新等,这些...
通过深入分析"MyContextMenu"的源码,我们可以了解到如何在实际项目中灵活运用上下文菜单,提高用户体验。同时,这也是一种很好的学习和实践Java编程、Android框架和UI设计的机会,对于毕业设计或提升个人技能都有很...
- 点击Menu按钮后进入菜单界面,长按菜单项时出现上下文菜单,点击后可以看到程序响应。 - 返回主界面,点击ListView按钮进入列表视图界面,点击列表项后程序做出响应。 #### 5. 自选综合设计考核报告 ##### 5.1 ...
通过阅读和分析源码,我们可以深入理解其内部工作机制,包括长按功能的实现细节、下拉刷新和上拉加载更多的逻辑,以及如何处理触摸事件等。 为了充分利用ZrcListView,开发者需要了解以下几个方面: - **适配器...
本篇将深入探讨一个名为"FileManager_android_"的开源项目,通过分析其源码,我们将了解如何构建一个功能完善的Android文件浏览器。 首先,我们要理解Android文件系统的结构。Android基于Linux内核,因此其文件系统...
源码分析可以帮助开发者理解如何集成这些功能到自己的ListView或RecyclerView中。 5. **自定义View**:为了实现独特的视觉效果,开发者常常需要创建自定义View。源码可能包含了一些自定义View的示例,如圆形头像、...
源码分析: 1. **Activity与UI组件**: Android应用的核心是Activity,它是用户界面的主要载体。目录管理器的源码中,通常会有一个主Activity负责显示文件目录树。这个Activity可能使用ListView或RecyclerView来...
【Android 仿ES界面文件浏览器源码分析】 在Android开发中,实现一个功能完善的文件浏览器是许多应用必不可少的一部分,尤其当需要用户能够浏览和管理本地文件时。"Android 仿ES界面文件浏览器源码"是一个典型的...
为了提升用户体验,可能还实现了长按菜单、拖放操作、搜索功能等。 8. **适配多种设备**:Android设备有各种屏幕尺寸和分辨率,因此源码可能包含了对不同屏幕大小的适配,如使用比例尺寸单位(dp、sp)和使用布局...
5. **用户交互**:源码中还可能包含触摸事件处理、长按菜单、滑动删除等功能的实现,这些都是Android中常见的用户交互设计。 6. **通知与提醒**:如果具备定时提醒功能,那么会有AlarmManager和服务(Service)来...
通过分析和学习Android FileManager的源码,开发者不仅可以掌握文件操作的基础知识,还能了解到Android系统的文件权限管理、Intent交互、UI设计等方面的内容,对于提升Android应用开发技能大有裨益。同时,这也有助...
源码中会有触摸事件的处理,如滑动查看历史消息、长按消息的弹出菜单等。 9. **网络状态监测**:为了确保在网络不稳定时仍能正常运行,源码会包含网络状态监测的代码,比如使用BroadcastReceiver监听网络连接变化。...