Android onTouch方法调用了两次的问题

本文探讨了在Android开发中使用onTouchListener时遇到的问题——触发两次弹窗的现象,并提出了解决方案,即通过MotionEvent判断并阻止多余的触发。

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

今天在做安卓应用时,有一个功能是点一下某个部件的时候弹出一个对话框,用的是onTouchListener,但是发现点击的时候弹出了两个窗口,观察输出,发现onTouch事件调用了两次:


怎么回事呢?

原来,onTouch事件在手指按下和离开的时候分别调用了一次。

那么我只需要弹出一个窗口,也就是触发一次,怎么修改呢?

答案就是判断一下当前的onTouch事件是正在按下还是正在离开,用的是其中一个给定的参数:MotionEvent 类型的 event,当本次onTouch是离开时,阻止程序继续执行即可:

cop_province.setOnTouchListener(new View.OnTouchListener() {
	@Override
	public boolean onTouch(View v, MotionEvent event) {
		//阻止手指离开时onTouch方法的继续执行
		if(event.getAction() == MotionEvent.ACTION_UP){
			return true;
		}
也就是说,onTouch还是执行两次,但第二次的弹窗操作被制止了,也就达到了效果。

看来,对于看似简单的Touch事件,Android的设计者们远比我们想得周到。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小鹰信息技术服务部

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值