记录下帮助一位网友解决的关于android子控件的onTouch或onClick和父OnTouch 冲突的问题。
前三天收到位网友的私信求助,问题大概如标题所示。具体是下面的情况,个人感觉,这个问题挺有趣,也会在实际项目开发中很常见。不想看前奏的请直接跳至解决方法。
问题原型:
父控件是自定义的 LinearLayout,目的是实现下拉刷新,这个自定义View的实现下拉操作思想是通过检测 onTouch 事件,然后,子控件有一个 scrollView,它是完全为了实现下滚和滚到底部实现加载更多的监听。看到这,我相信任何一个有类似项目开发经验的人,都会感到很熟悉的。下拉刷新+下滑加载更多。
在 scrollView 里面的第一层View里面有很多一样的自定义的 View,每个有具备自身的 onClick 和 onTouch 事件,目的是为了在用户点击的时候实现变色和相应。
问题来了,根据他说的,每次点击,总是先实现 自定义View的 onTouch 的down,然后是 onClick,而 父 Linearlayout的 onTouch是最后实现,而且,父的 action_down 没有执行,这样就直接导致了父View 拿不到用户的 点击坐标,下拉刷新出问题!就是说,各种冲突。
我们知道,在同一个 View中,注意,是同一个 View,没嵌套的情况下,用户手势事件执行顺序是:
onTouch->onLongClick->onClick。
交谈细节:
我问:你自己百度过了吗?
他答:嗯,百度上有onClick和onTouch的冲突例子,但是全都是针对同一个 View的情况下,而且 无论onTouch返回false不阻断还是true阻断继续传送下去,都是无作用。
他的回答很清晰,他的这个状况的冲突是 嵌套的,大家大可百度下,因为我在帮他的时间里,也百度过,基本无答案。最能接近的是父View的onTouch里面使用 requestDisallowInterceptTouchEvent 来允许这个手势事件能传给 子View,但是,他的这个问题是,儿子不爽父亲先的。确实蛋碎。
我再问:是不是你的布局有问题,怎么会是子 View 阻断 父 View?
他再答:他的布局就是正常的嵌套。
在无语了一会之后,想了下,觉得这样应该可以搞定。
解决方法:
既然传统的解决方法解决不了,我当时想到的是:
1:子View 使用父类的 onTouch 接口来实现点击和改变颜色,总之就是子View不要自己再实现 onClick和onTouch;
2:父View 实现个接口,供子View实现自己的onTouch内容;
3:当用户onTouch的时候,父View 在恰当的时候调用该接口,实现子View的请求的功能。
这样所会产生的问题:
因为它的这个父View是整个使用onTouch来实现下拉的,所以:
1:用户点击后会产生两次的 onTouch执行,一次是子 View,第二次是 父View。
这样就需要他来使用逻辑区分了,逻辑区分不难,几个 boolean 即可,所用内存几个 bit。
最后问他,这样能否接受,他说试试先,刚刚发信息来,完美解决。逐有感而发此文。
在我们百度或请教人都解决不了的问题的情况下,应该自己思考下动手解决!
记录下帮助一位网友解决的关于android子控件的onTouch或onClick和父OnTouch 冲突的问题。的更多相关文章
- 记录下UIButton的图文妙用和子控件的优先显示
UIButton的用处特别多,这里只记录下把按钮应用在图文显示的场景,和需要把图片作为按钮的背景图片显示场景: 另外记录下在父控件的子控件优先显示方法(控件置于最前面和置于最后面). 先上效果图: 1 ...
- 五种情况下会刷新控件状态(刷新所有子FWinControls的显示)——从DFM读取数据时、新增加子控件时、重新创建当前控件的句柄时、设置父控件时、显示状态被改变时
五种情况下会刷新控件状态(刷新控件状态才能刷新所有子FWinControls的显示): 在TWinControls.PaintControls中,对所有FWinControls只是重绘了边框,而没有整 ...
- 解决ListView中Item的子控件与Item点击事件冲突
常常会碰到在ListView中点击当中一个Item.会一并触发其子控件的点击事件.比如Item中的Button.ImageButton等.导致了点击Item中Button以外区域也会触发Button点 ...
- c# 遍历子控件,比如Form下的group,或者panel
方法很好用.目的是遍历所有容器的子控件... 方法1private void GetControl(Control.ControlCollection ctc, ref int checkNull) ...
- wpf 寻找某个控件下的子控件
/// <summary> /// 寻找某个控件下的子控件 /// </summary> /// <typeparam name="ChildType" ...
- ListView中的Item点击事件和子控件的冲突或者item点击没有反应的解决的方法
fragment中加入了button和checkbox这些控件.此时这些子控件会将焦点获取到.所以经常当点击item时变化的是子控件.item本身的点击没有响应. 这时候就能够使用descendant ...
- WPF解决按钮上被透明控件遮盖时无法点击问题
原文:WPF解决按钮上被透明控件遮盖时无法点击问题 IsHitTestVisible="False" 在控件上设置如上属性即可,即可让透明控件不触发点击效果
- jquery on事件在IE8下失效的一种情况,及解决方法/bootstrap空间绑定控件事件不好用
同事在复制bootstrap中的select控件之后,发现用$('.selectpicker').selectpicker();刷新下拉框控件不好使,后来发现是用原生js克隆的方法obj.cloneN ...
- 张奎师弟参与devexpress chartControl绘图--解决了devexpress的chartControl控件不能添加系列的问题
using DevExpress.XtraCharts; using System; using System.Collections.Generic; using System.ComponentM ...
随机推荐
- linux终端 字符界面 显示乱码
方法一:配置SSH工具 SecureCRT中文版配置 [全局选项]→[默认会话]→[编辑默认设置]→[终端]→[外观]→[字体]→[新宋体 10pt CHINESE_GB2312]→[字符编码 UTF ...
- RecyclerView的介绍与使用
一.什么是RecyclerView 新的视图控件,是Android-support-v7-21版本中新增的一个Widgets,官方对于它的介绍则是:RecyclerView是ListView的升级版本 ...
- 我的window10
前言 这个一时半会写不完,也比较耗费时间,留着以后,每周更新一些新的技巧. 折腾了3天多时间的成果——>window10 的全新桌面,不比苹果差!不要说 windows 不能用 mac . 既然 ...
- Smart3D系列教程5之 《案例实战演练2——大区域的地形三维重建》
一.前言 Wish3D出品的Smart3D系列教程中,前面一讲说明了小物件的照片三维重建,相信大家对建模的流程有了一定的了解.这次讲解中,我们将演示说明以一组无人机倾斜摄影照片为原始数据,通过Smar ...
- Unity之CharacterController 碰撞问题总结
CharacterController 不会受到scene的重力影响,自带物理碰撞检测,在脱离导航网格的应用场景下(比如飞行),是很有优势的Unity原生工具组件.如果在复杂的应用场景里,会有多种CC ...
- 谢欣伦 - 原创软件 - 工具软件 - 快速关机Shutdown
快速关机Shutdown,含源码. 公司公用的笔记本电脑实在太烂,不知从什么时候开始关机永远都关不了,一直停留在“关闭系统中……”.忍无可忍之下,自己写了一个快速关机程序. 下载: Shutdown_ ...
- Android 开发快速导引:Android程序框架【草】
概述 学习一项新技术之前要先了解这个技术的整体框架,这里先简单说一下 Android 的程序结构. Android App 有四个顶层的类:Activity.Service.ContentProvid ...
- c#开源消息队列中间件EQueue 教程
一.简介 EQueue是一个参照RocketMQ实现的开源消息队列中间件,兼容Mono,具体可以参看作者的文章<分享一个c#写的开源分布式消息队列equeue>.项目开源地址:https: ...
- .NET不可变集合已经正式发布
微软基础类库(Base Class Library)团队已经完成了.NET不可变集合的正式版本,但不包括ImmutableArray.与其一起发布的还包括针对其它不可变对象类型的设计指南. 如果你需要 ...
- HTML5- Canvas入门(六)
已经第六章了,也差不多接近尾声,如果你从第一章耐心follow到本章结束,那你便能掌握canvas的大部分知识点(当然如果要精通,还是得多靠练习,做一些小案例). 今天我们要学习的是canvas的变形 ...