Android事件传递机制

本文介绍了Android开发过程中遇到的侧滑菜单与ListView冲突问题及其解决方案。通过理解Android事件传递机制,包括dispatchTouchEvent和onTouchEvent的作用,提出了在Activity中对事件传递进行判断的方法来解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        最近本人在做Android开发的过程中遇到一个问题:侧滑菜单和ListView冲突问题,具体讲就是在ListView中侧滑的时候,侧滑菜单不能响应。然后就粗略的研究了一下Android的事件传递机制,并结合程序不断调试,最终解决了这个问题。现,写下博客一篇警示后人,也避免自己忘记。

1.Android事件传递机制:

首先说一下Android事件传递的机制。要了解这个不得不说一下android中的三个方法。onTouchEvent、 onIntercepTouchEvent 和 dispatchTouchEvent。平时我们捕捉touch事件的代码主要写在Activity中,而Activity中又没有onIntercepTouchEvent,所以我只说一下onTouchEvent和dispatchTouchEvent这两个比较重要的方法。dispatchTouchEvent主要负责事件的分发和传递,而onTouchEvent则负责事件的处理。也就是说,当Activity获取一个Touch事件后,就开始调用dispatchTouchEvent向子控件传递(由外到内),然后子控件调用onTouchEvent进行处理,如果返回True,那么事件到此结束,Activity中的onTouchEvent则触发不了了。如果子控件调用onTouchEvent处理完后返回False,则会触发父控件的onTouchEvent。啰哩啰嗦一大堆,大概就这么个意思。如果还是不懂,下面看图。


2.解决方案:

到此应该基本了解android的事件传递机制了吧。那么如何解决我们的问题呢?

        a、重写ListView的onTouch事件肯定能够解决,但是存在以下问题:

             (1)、太麻烦

             (2)、因为侧滑菜单会对应多个界面,如果采用重写的办法,那么每个对应的页面都要重写其控件的onTouchEvent

        b、在Activity中的dispatchTouchEvent对事件传递进行判断,当为左右滑动的时候,终止传递,当为上下滑动的时候则进行传递。


        总结:本文只是简单陈述了android事件传递机制并提供了解决类似冲突的处理方法。如果想要深入了解android事件传递过程和流程,请参考网络android大神的博客以及android开发文档。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值