如何重写listviewjdi event dispatchhtouchevent

本文背景:前些天用到了之前写的,在给他设置监听时遇到了麻烦。虽然最后解决了问题,但发现在不重写LinearLayout的onInterceptTouchEvent时,子ImageView、子TextView、父Linearlayout三者不同的属性配置(android:clickable
android:focuseable)会造成自定义控件onClick监听失败、或成功。复写了父Linearlayout 的onInterceptTouchEvent时,监听不受子图片、子文字的属性影响。为知其所以然,深入研究android的事件传递机制,记录于此。
一、View的dispatchTouchEvent和onTouchEvent
探讨Android事件传递机制前,明确android的两大基础控件类型:View和ViewGroup。View即普通的控件,没有子布局的,如Button、TextView. ViewGroup继承自View,表示可以有子控件,如Linearlayout、Listview这些。而事件即MotionEvent,最重要的有3个:
(1)MotionEvent.ACTION_DOWN &按下View,是所有事件的开始
(2)MotionEvent.ACTION_MOVE & 滑动事件
(3)MotionEvent.ACTION_UP & & & 与down对应,表示抬起
另外,明确事件传递机制的最终目的都是为了触发执行View的点击监听和触摸监听:
******.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
Log.i(tag, &testLinelayout---onClick...&);
*******.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
我们简称为onClick监听和onTouch监听,一般程序会注册这两个监听。从上面可以看到,onTouch监听里默认return false。不要小看了这个return false,后面可以看到它有大用。
对于View来说,事件传递机制有两个函数:dispatchTouchEvent负责分发事件,在dispatch***里又会调用onTouchEvent表示执行事件,或者说消费事件,结合源码分析其流程。事件传递的入口是View的dispatchTouchEvent()函数:
找到这个判断:
& & & & & & if (li != null && li.mOnTouchListener != null && (mViewFlags & ENABLED_MASK) == ENABLED
& & & & & & & & & & && li.mOnTouchListener.onTouch(this, event)) {
& & & & & & & &
& & & & & & }
他会执行View的OnTouchListener.onTouch这个函数,也就是上面说的onTouch监听。里面有三个判断,如果三个都为1,就会执行return true,不往下走了。而默认的onTouch监听返回false,只要一个是false,就不会返回true。接着往下看,程序执行onTouchEvent:
onTouchEvent的源码比较多,贴最重要的:
可以看到有个performClick(),它的源码里有这么一句&li.mOnClickListener.onClick(this);
终于对上了,它执行了我们注册的onClick监听。当然执行前会经过一系列判断,是否注册了监听等。
1、事件入口是dispatchTouchEvent(),它会先执行注册的onTouch监听,如果一切顺利的话,接着执行onTouchEvent,在onTouchEvent里会执行onClick监听。
2、无论是dispatchTouchEvent还是onTouchEvent,如果返回true表示这个事件已经被消费、处理了,不再往下传了。在dispathTouchEvent的源码里可以看到,如果onTouchEvent返回了true,那么它也返回true。如果dispatch***在执行onTouch监听的时候,onTouch返回了true,那么它也返回true,这个事件提前被onTouch消费掉了。就不再执行onTouchEvent了,更别说onClick监听了。
3、我们通常在onTouch监听了设置图片一旦被触摸就改变它的背景、透明度之类的,这个onTouch表示事件的时机。而在onClick监听了去具体干某些事。
下面通过代码来说明,自定义一个TestButton继承自Button,重写它的dispath***和onTouchEvent方法,为了简单只关注down和up事件。
在Activity里注册两个监听:
同时复写Activity的dispatch方法和onTouchEvent方法:
最终一次点击,打印信息如下:
Line 33: 01-08 14:59:45.847 I/yan & & ( 4613): MainActivity-dispatchTouchEvent-ACTION_DOWN...
Line 35: 01-08 14:59:45.849 I/yan & & ( 4613): TestButton-dispatchTouchEvent-ACTION_DOWN...
Line 37: 01-08 14:59:45.849 I/yan & & ( 4613): testBtn-onTouch-ACTION_DOWN...
Line 39: 01-08 14:59:45.849 I/yan & & ( 4613): TestButton-onTouchEvent-ACTION_DOWN...
Line 41: 01-08 14:59:45.939 I/yan & & ( 4613): MainActivity-dispatchTouchEvent-ACTION_UP...
Line 43: 01-08 14:59:45.941 I/yan & & ( 4613): TestButton-dispatchTouchEvent-ACTION_UP...
Line 45: 01-08 14:59:45.944 I/yan & & ( 4613): testBtn-onTouch-ACTION_UP...
Line 47: 01-08 14:59:45.946 I/yan & & ( 4613): TestButton-onTouchEvent-ACTION_UP...
Line 49: 01-08 14:59:45.974 I/yan & & ( 4613): testBtn---onClick...
事件先由Activity的dispatchTouchEvent进行分发,然后TestButton的dispatchTouchEvent进行分发,接着执行onTouch监听,然后执行onTouchEvent。第二次UP动作的时候,在onTouchEvent里又执行了onClick监听。
如果我们想这个TestButton只能执行onTouch监听不能执行onClick监听,方法有很多。在onTouch监听里默认返回false改为true,如下:
事件流程为:
Line 75: 01-08 15:05:51.627 I/yan & & ( 5262): MainActivity-dispatchTouchEvent-ACTION_DOWN...
Line 77: 01-08 15:05:51.628 I/yan & & ( 5262): TestButton-dispatchTouchEvent-ACTION_DOWN...
Line 79: 01-08 15:05:51.629 I/yan & & ( 5262): testBtn-onTouch-ACTION_DOWN...
Line 81: 01-08 15:05:51.689 I/yan & & ( 5262): MainActivity-dispatchTouchEvent-ACTION_UP...
Line 83: 01-08 15:05:51.691 I/yan & & ( 5262): TestButton-dispatchTouchEvent-ACTION_UP...
Line 85: 01-08 15:05:51.695 I/yan & & ( 5262): testBtn-onTouch-ACTION_UP...
可以看到压根就没执行onTouchEvent。因为onTouch返回了true,已提前将这个事件消费了,就不往下传了,dispatch流程提前终止。
二、ViewGroup的dispatchTouchEvent、onInterceptTouchEvent、onTouchEvent
再来看ViewGroup,在复写ViewGroup时可以发现它的onTouchEvent在在View里的,表示这两个方法是一样的。但dispatchTouchEvent是在ViewGroup里的,表示和View的dispatchTouchEvent不一样,多了一个onInterceptTouchEvent函数,表示拦截的意思。&打个很形象的比喻,这玩意就像个秘书、谋士。为啥View没有呢,因为它级别不够,一个Button里面是不可能有子View的。但LinearLayout(继承ViewGroup)就有孩子(子布局),这个onInterceptTouchEvent就会判断事件要不要通知它的孩子呢。它的源码如下:
可以看到标红的有两句(intercepted = onInterceptTouchEvent(ev); &&&if (!canceled && !intercepted)&&),它会先调用&intercepted = onInterceptTouchEvent(ev);然后通过if判断。
它就一句话,默认false。也就是说这个谋士默认的意见是,永远不拦截!!!!只要有孩子,就交给孩子们处理吧。下面给出实例说明,新建TestLinearLayout继承自Linearlayout。
布局文件改成:
在Activity里给这个自定义LinearLayout也注册上onClick监听、onTouch监听。
不复写事件传递里的 任何方法,流程如下:
Line 57: 01-08 15:29:42.167 I/yan & & ( 5826): MainActivity-dispatchTouchEvent-ACTION_DOWN...
Line 59: 01-08 15:29:42.169 I/yan & & ( 5826): TestLinearLayout-dispatchTouchEvent-ACTION_DOWN...
Line 61: 01-08 15:29:42.169 I/yan & & ( 5826): TestLinearLayout-onInterceptTouchEvent-ACTION_DOWN...
Line 63: 01-08 15:29:42.169 I/yan & & ( 5826): TestButton-dispatchTouchEvent-ACTION_DOWN...
Line 65: 01-08 15:29:42.170 I/yan & & ( 5826): testBtn-onTouch-ACTION_DOWN...
Line 67: 01-08 15:29:42.170 I/yan & & ( 5826): TestButton-onTouchEvent-ACTION_DOWN...
---------------------------------------------------------------------------------------------------------------------------
Line 69: 01-08 15:29:42.279 I/yan & & ( 5826): MainActivity-dispatchTouchEvent-ACTION_UP...
Line 71: 01-08 15:29:42.280 I/yan & & ( 5826): TestLinearLayout-dispatchTouchEvent-ACTION_UP...
Line 73: 01-08 15:29:42.283 I/yan & & ( 5826): TestLinearLayout-onInterceptTouchEvent-ACTION_UP...
Line 75: 01-08 15:29:42.287 I/yan & & ( 5826): TestButton-dispatchTouchEvent-ACTION_UP...
Line 81: 01-08 15:29:42.298 I/yan & & ( 5826): testBtn-onTouch-ACTION_UP...
Line 83: 01-08 15:29:42.301 I/yan & & ( 5826): TestButton-onTouchEvent-ACTION_UP...
Line 85: 01-08 15:29:42.313 I/yan & & ( 5826): testBtn---onClick...
由Activity的dispatchTouchEvent----Linearlayout的dispatchTouchEvent------------问问它的谋士要不要让孩子知道onInterceptTouchEvent---------孩子的dispatchTouchEvent-----孩子的onTouch监听------孩子的onTouchEvent----孩子的onClick监听。为了更清晰这个流程,下面作如下改动:
1、如果事件传给了孩子们,但孩子没有onTouch和onClick监听怎么办?即将button的onclick和onTouch都注释掉:
Line 131: 01-08 15:36:16.574 I/yan & & ( 6124): TestLinearLayout-dispatchTouchEvent-ACTION_DOWN...
Line 133: 01-08 15:36:16.574 I/yan & & ( 6124): TestLinearLayout-onInterceptTouchEvent-ACTION_DOWN...
Line 135: 01-08 15:36:16.574 I/yan & & ( 6124): TestButton-dispatchTouchEvent-ACTION_DOWN...
Line 137: 01-08 15:36:16.575 I/yan & & ( 6124): TestButton-onTouchEvent-ACTION_DOWN...
Line 143: 01-08 15:36:16.746 I/yan & & ( 6124): MainActivity-dispatchTouchEvent-ACTION_UP...
Line 145: 01-08 15:36:16.747 I/yan & & ( 6124): TestLinearLayout-dispatchTouchEvent-ACTION_UP...
Line 147: 01-08 15:36:16.747 I/yan & & ( 6124): TestLinearLayout-onInterceptTouchEvent-ACTION_UP...
Line 149: 01-08 15:36:16.748 I/yan & & ( 6124): TestButton-dispatchTouchEvent-ACTION_UP...
Line 151: 01-08 15:36:16.748 I/yan & & ( 6124): TestButton-onTouchEvent-ACTION_UP...
因为事件给了孩子们,它没监听也关系不到父亲了,父亲的onClick和onTouch都没执行。
2,如果将TestLinearlayout的onInterceptTouchEvent 改成return true,即不让孩子们知道。
Line 57: 01-08 15:40:06.832 I/yan & & ( 6640): MainActivity-dispatchTouchEvent-ACTION_DOWN...
Line 59: 01-08 15:40:06.835 I/yan & & ( 6640): TestLinearLayout-dispatchTouchEvent-ACTION_DOWN...
Line 61: 01-08 15:40:06.836 I/yan & & ( 6640): TestLinearLayout-onInterceptTouchEvent-ACTION_DOWN...
Line 63: 01-08 15:40:06.836 I/yan & & ( 6640): testLinelayout-onTouch-ACTION_DOWN...
Line 65: 01-08 15:40:06.836 I/yan & & ( 6640): TestLinearLayout-onTouchEvent-ACTION_DOWN...
Line 67: 01-08 15:40:07.016 I/yan & & ( 6640): MainActivity-dispatchTouchEvent-ACTION_UP...
Line 69: 01-08 15:40:07.017 I/yan & & ( 6640): TestLinearLayout-dispatchTouchEvent-ACTION_UP...
Line 73: 01-08 15:40:07.025 I/yan & & ( 6640): testLinelayout-onTouch-ACTION_UP...
Line 75: 01-08 15:40:07.026 I/yan & & ( 6640): TestLinearLayout-onTouchEvent-ACTION_UP...
Line 77: 01-08 15:40:07.052 I/yan & & ( 6640): testLinelayout---onClick...
果然事件就此打住,孩子们压根不知道,父亲执行了onClick和onTouch监听。可见父亲还是伟大的啊,只要谋士不拦截事件,那么事件就给孩子。
最后的结论:
1、如果是自定义复合控件,如图片+文字,我再Activity里给你注册了onClick监听,期望点击它执行。那么最简单的方法就是将图片+文字的父布局,也即让其容器ViewGroup的秘书将事件拦下,这样父亲就可以执行onClick了。这时候的父亲就像一个独立的孩子一样了(View),无官一身轻,再也不用管它的孩子了,可以正常onClick onTouch.
2、如果希望一个View只onTouch而不onClick,在onTouch里return true就ok了。
3、dispatch是为了onTouch监听,onTouchEvent是为了onClick监听。
4、自定义布局时,一般情况下:
public boolean onTouchEvent(MotionEvent event) {return super.onTouchEvent(event);} &
public boolean dispatchTouchEvent(MotionEvent event) {return super.dispatchTouchEvent(event);
我们可以复写,但是最后的super.***是万万不能少滴。如果少了,表示连dispatch*** onTouchEvent压根就不调用了,事件就此打住。
貌似真相水落石出了,但究竟清楚了没有请看下篇根据自定义复合控件的监听问题再探讨下。
参考: &&&(灰常感谢前辈的大作啊) & &
测试代码: &
转载自:http://blog.csdn.net/yanzi1225627/article/details/,非常感谢这位大神()
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:2597次
排名:千里之外
原创:29篇
(1)(3)(9)(6)(1)(2)(1)(3)(6)(1)(1)开发笔记:解决安卓GestureOverlayView手势和ListView点击事件、文本框获取焦点冲突的问题
开发笔记:解决安卓GestureOverlayView手势和ListView点击事件、文本框获取焦点冲突的问题
要解决这个问题,首先要弄清楚几个问题:
1、onThouch事件的触发原理是怎样的?
2、GestureOverlayView的绘制手势的事件是在什么时候触发的?
3、父子嵌套的控件触发事件的顺序是怎样的?
4、父子控件获取焦点的顺序是怎样的?
第一个问题,安卓中任何控件的onThouch事件触发的时候,都经过了以下过程:
& & & &&public boolean dispatchTouchEvent(MotionEvent ev) ,该方法如果返回true,则事件在该位置被消费掉,不再向下传递,返回false则继续传递至
& & public boolean onInterceptTouchEvent(MotionEvent ev)这个方法,该方法是事件拦截器,如果返回true,则触发该控件的onThouch事件,否则就将事件传递给该控件的子控件,
& & & public boolean onTouchEvent(MotionEvent ev),返回true的话就消费掉该事件,返回false就传递到该控件的父控件的onThouch事件
在网上找到一个图片,能简洁明了的反映以上关系:
第二个问题,查看GestureOverlayView源码可知道,手势绘制的监听触发时间是在dispatchTouchEvent(MotionEvent ev)这个事件中就完成的,所以只要有触摸屏幕的动作,就必然会被它先消费掉,这也是手势事件和其他控件冲突的根本原因~源码如下:
public boolean dispatchTouchEvent(MotionEvent event) {
if (isEnabled()) {
final boolean cancelDispatch = (mIsGesturing || (mCurrentGesture != null &&
mCurrentGesture.getStrokesCount() & 0 && mPreviousWasGesturing)) &&
mInterceptE
processEvent(event);
if (cancelDispatch) {
event.setAction(MotionEvent.ACTION_CANCEL);
super.dispatchTouchEvent(event);
return super.dispatchTouchEvent(event);
private boolean processEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
touchDown(event);
invalidate();
case MotionEvent.ACTION_MOVE:
if (mIsListeningForGestures) {
Rect rect = touchMove(event);
if (rect != null) {
invalidate(rect);
case MotionEvent.ACTION_UP:
if (mIsListeningForGestures) {
touchUp(event, false);
invalidate();
case MotionEvent.ACTION_CANCEL:
if (mIsListeningForGestures) {
touchUp(event, true);
invalidate();
基于这个原因,可能很多人会考虑通过重写GestureOverlayView控件来解决冲突问题,我也试过了,但是依然不能解决较为复杂的问题,所以在次就不再赘述了。
第三个问题,借用一篇博客来说明问题,在此感谢博主 @(博文写的很详细)
借用第三个问题,第四个问题就迎刃而解了,可以简单的理解为,正常情况下,最内层的控件是最先获取焦点的,
最外层的是最后获取焦点的;但是最外层的获取焦点的优先级是最高的,一旦它决定拦截并消费事件,那么它的子控件就不能再获取该事件;
解决冲突的方法:
我的需求是在一个ListView页面启用手势功能,
用户如果画了手势,则根据手势内容做不同的反应,但是手势不能影响ListView的滚动、点击、选中的操作;
ListView中包含文本框;如果点击的是文本框,不能影响文本框获取焦点进行编辑;
我重写GestureOverlayView的时候解决了前2个需求,但是文本框死活获取不了焦点;
布局文件如下,需要说明是,因为之前是通过重写来做的,但是最后没解决,于是重写的文件直接调用了super,等于没重写:
android:id=&@+id/list_aj&
android:layout_width=&fill_parent&
android:layout_height=&fill_parent&
android:clickable=&true&
android:longClickable=&true&
android:id=&@+id/textViewModel&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&
android:layout_alignParentLeft=&true&
android:layout_centerVertical=&true&
android:id=&@+id/textViewValueModel&
android:layout_width=&300dp&
android:layout_height=&40dip&
android:layout_centerVertical=&true&
android:gravity=&center_vertical&
android:layout_marginLeft=&110dip&
android:textSize=&17sp&
android:background=&@null&
android:inputType=&text&
android:focusable=&false&
android:visibility=&gone&
&ImageView
android:id=&@+id/imageViewModel&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&
android:layout_alignParentRight=&true&
android:contentDescription=&@string/descTask&
android:layout_centerVertical=&true&/&
&com.zbtc_it.tcis.Util.MGestureOverlayView
calss=&com.zbtc_it.tcis.Util.MGestureOverlayView&
android:id=&@+id/gesture&
android:layout_width=&fill_parent&
android:layout_height=&fill_parent&
android:gravity=&center&
&/com.zbtc_it.tcis.Util.MGestureOverlayView&
重写的时候,我用MGestureOverlayView包含了ListView,
但是后来一想,因为MGestureOverlayView每次都会最先拦截,并且它必然会消费事件,所以这样肯定是不行的,
于是就换成并列的,解决方法就是,在MGestureOverlayView的onThouch事件中,手动赋予ListView的事件源,代码如下
overlays = (MGestureOverlayView) layout.findViewById(R.id.gesture);
overlays.setGestureStrokeType(GestureOverlayView.GESTURE_STROKE_TYPE_MULTIPLE);
overlays.setFadeOffset(1000);// 多笔画2笔之间的时间间隔
overlays.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
itemListView.dispatchTouchEvent(event);//赋予ListView事件源
//消费掉事件
同时重写ListView的onInterceptTouchEvent方法,让其直接返回false
(这步好像不是必须的,忘记了 &_& ,默认的貌似就是返回false)
我的热门文章
即使是一小步也想与你分享经检测你所在的网络可能存在爬虫,因资源限制,我们只能拒绝你的请求。
如果你是推酷的用户,可以以继续访问使用。
如有疑问,可将IP信息发送到
请求解封。android中listview绑定scroll与touch双监听,并且让touch优先响应
本帖最后由 thuderstorm 于
22:39 编辑
&&&如题所示,绑定这两个监听是特别有用的,但是在一个listview绑定了scrolllistener后,touch监听会在onscrollchange后才会触发。&
&&&如果一个需求是这样的,一个listview或者是继承listview的对象,在实现会话列表时,在绑定scrolllistener后就会造成ontouch事件只有在两条item的中间空隙会有相应或者是scorllchanged之后会有响应,这就会造成ontouch事件滞后。像如点击屏幕取消键盘等一系列的功能性变得很差很差(毕竟空隙是少数嘛)。
&&&不多说了,说一下我的解决方法。&
&&&&&&&&&&&&&&&
//这是activity中的listview绑定touch监听已经实现业务逻辑的代码,此处是用于回调&/font&
&&&&&&&&&&&&&&
mConversationListView.setOnTouchListener(new OnTouchListener()
&@Override
&& &public
boolean onTouch(View v, MotionEvent event) {
(event.getAction()) {
MotionEvent.ACTION_DOWN:
//todo something
由于我是重写了listview,所以大家就凑合着看吧,下面是我重写的listview实现该功能的关键性代码
&&&&&&&@Override
&&&public void
onScroll(AbsListView arg0, int firstVisiableItem, int arg2, int
&&&@Override
&&&public void
onScrollStateChanged(AbsListView arg0, int arg1) {
&& & switch
当不滚动时
OnScrollListener.SCROLL_STATE_IDLE:
&isListViewOnFoot =
判断滚动到底部
(this.getLastVisiblePosition() == (this.getCount() - 1)) {
&&&isListViewOnFoot
这是重写了这个listview的ontouch事件,将setOnTouchListener(OnTouchListner
l)重写,得到touchlistener实例化对象,然后将这个对象放入到dispatchTouchEvent中进行处理。此时的ontouchlistener就是activity中重写的那个listner,一个简单的回调函数
private OnTouchListener mOnTouchL
&&&@Override
&&&public void
setOnTouchListener(OnTouchListener l) {
mOnTouchListener =
&&&@Override
boolean dispatchTouchEvent(MotionEvent ev) {
&& & try {
&if(mOnTouchListener!=null){
&&&mOnTouchListener.onTouch(this,
&& &return
super.dispatchTouchEvent(ev);
catch(Exception e) {
&if(LogF.DEBUG) {
&&&LogF.e("PullDownRefreshList",
e.toString());
&& & return
android系统中的每个View的子类都具有下面三个和TouchEvent处理密切相关的方法:
1)public boolean
dispatchTouchEvent(MotionEvent
ev)&&这个方法用来分发TouchEvent
2)public boolean
onInterceptTouchEvent(MotionEvent ev)
这个方法用来拦截TouchEvent
3)public boolean
onTouchEvent(MotionEvent ev)
这个方法用来处理TouchEvent
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。[操作系统]ListView滑动不爽,滚动一页得滑几次?该用分页列表啦!
你的位置:
[操作系统]ListView滑动不爽,滚动一页得滑几次?该用分页列表啦!
ListView等滚动位置经常不符合用户期望:很多时候都是看完一页想滑到下一页,但滑动一次距离往往不是不够就是超过,很难控制。&PagedListView工程中提供了PageScoller来解决这个问题。使用PageScoller可以在 中低速滑动 后会滚动一页,很慢滑动 或 很快滑动 则按默认处理。&使用方法如下:1.初始化PageScollerpageScoller = new PageScoller(listView);pageScoller.init();&2.重写dispatchTouchEvent方法在Activity的dispatchTouchEvent方法内 pageScoller.dispatchTouchEvent(ev); 具体如下:@Overridepublic boolean dispatchTouchEvent(MotionEvent ev) {
pageScoller.dispatchTouchEvent(ev);
return super.dispatchTouchEvent(ev);}&&工程中还提供了几个Demo,比如ListViewActivity 1 package zuo.biao. 2
3 import java.util.ArrayL 4 import java.util.L 5
6 import android.app.A 7 import android.os.B 8 import android.view.MotionE 9 import android.widget.ArrayA10 import android.widget.ListV11 12 /**ListView示例13
* @author Lemon14 */15 public class ListViewActivity extends Activity {16 17
private ListView lvListV18
private List&String&19
private PageScoller pageS20
@Override21
protected void onCreate(Bundle savedInstanceState) {22
super.onCreate(savedInstanceState);23
setContentView(R.layout.list_view_activity);24
lvListView = (ListView) findViewById(R.id.lvListView);26 27
list = new ArrayList&String&();28
for (int i = 0; i & 100; i++) {29
list.add("Item" + i);30
lvListView.setAdapter(new ArrayAdapter&String&(this, android.R.layout.simple_list_item_1, list));33
pageScoller = new PageScoller(lvListView);35
pageScoller.init();36
* Fragment中没有这个方法,可在Fragment内新建dispatchTouchEvent方法,40
* 然后在添加Fragment的Activity中重写dispatchTouchEvent方法,并在该方法内调用Fragment里的dispatchTouchEvent方法,41
* 即fragment.dispatchTouchEvent(ev);42
@Override44
public boolean dispatchTouchEvent(MotionEvent ev) {45
pageScoller.dispatchTouchEvent(ev);46
return super.dispatchTouchEvent(ev);47
}48 49 }&&下载地址(欢迎Star,欢迎Fork)/TommyLemon/PagedListView下载试用PagedListView.apk
、 、 、 、 、

我要回帖

更多关于 event dispatch 的文章

 

随机推荐