关于Fragment叠加点击穿透的解决方案
来源:互联网 发布:如何修改淘宝地址 编辑:程序博客网 时间:2024/05/18 09:41
项目中采用Activity配合Fragment来完善整体布局框架,但是当多个Fragment添加进Fragment栈时,由于处于栈底的Fragment绑定了点击跟滑动监听事件,当新的Fragment添加进栈的时候,虽然上层的Fragment并没有实现任何监听事件,当时当用户触摸或者在屏幕上滑动的时候依然会触发位于栈底的Fragment上绑定的监听事件,其实这个问题看起来很奇葩,但是解决起来并不难,如果你对安卓里面的Touch事件比较熟,并且了解整个Touch事件的传递流程的话,相信解决办法的原理你肯定也很容易接受,其实就是一个事件拦截的问题,解决方案,大致分为三种,我全部拿出来跟大家分享下,上述阐述,说的不到位的还请勿喷!
1.在xml文件中解决
其实这个思想很简单,叠加在一起的Fragment栈顶的Fragment会响应底部的点击或者滑动事件,而且还会响应Activity中的事件,你只需在每个Fragm的布局的根节点上把clickable属性设为true即可解决
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="#fff" android:clickable="true" > <!--解决Fragment点击穿透,让布局文件的根节点clickable="true"阻止事件的传播-->这里的解决问题的思想也是事件的截断,阻止当前事件的继续传播
2.在Fragment的onCreateView()方法中
第二种解决方法其实跟第一种解决方法一样,无非一个处理问题是在xml文件中,另一个是在java代码中,直接在Fragment的onCreateView方法中,把要返回的view对象的clickable属性设置为true
/** * Created by 谢栋 on 2016/12/31. */public class HeartShareItemFram extends Fragment { @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { view = inflater.inflate(R.layout.heart_share_list_item,null); initView(); view.setClickable(true); //把View的click属性设为true,截断点击时间段扩散 return view; }
/** * Created by 谢栋 on 2016/12/31. */public class HeartShareItemFram extends Fragment{ @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { view = inflater.inflate(R.layout.heart_share_list_item,null); initView();// view.setClickable(true); //把View的click属性设为true,截断点击时间段扩散 view.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { return true; //截断事件的传递 } }); return view; }这里对OnTouchListener的监听事件我是采用匿名内部类的形式,当然在实际项目开发中为了代码的整洁性,你完全可以让Fragment实现View.OnTouchListener接口,然后实现里面的方法即可。
三种方法总结起来无非就是一个事件传递拦截的问题,那所以看问题还是要看本质,当你把一个问题看透彻之后,解决问题的方法往往有很多,一句话,办法总比困难多!共勉
0 0
- 关于Fragment叠加点击穿透的解决方案
- Fragment叠加点击穿透解决方案
- 关于Fragment点击事件穿透的三个解决方案
- Android开发技术点2——Fragment叠加点击穿透解决方案
- 关于fragment点击穿透处理
- 关于fragment点击穿透的重叠显示解决方法
- 关于fragment点击能穿透问题
- 关于fragment点击能穿透问题
- 关于fragment点击能穿透问题
- Fragment 点击穿透 解决办法
- fragment 穿透点击了
- fragment点击事件穿透解决方法
- fragment点击事件穿透解决方法
- fragment点击事件穿透问题
- Fragment 点击事件的穿透和重叠bug
- 【android】点击事件穿透解决方案
- Android开发中关于Fragment穿透事件的解决办法
- 解决Fragment内点击穿透问题
- 七种跨域方法【3.JSONP篇】
- POJ 1423 Big Number 阶乘位数+Stirling+JAVA .
- 历年数学界菲尔兹奖及其得主简介
- cobbler2.6.1网络安装ESXi5.0
- Linux命令
- 关于Fragment叠加点击穿透的解决方案
- 科大讯飞语音合成的引入
- 图解HTTPS
- matlab2014b 设置默认路径
- ThinkPHP3.1.3以pdo方式连接SQLServer2000
- hsf dubbo学习六--泛化,回声测试,上下文信息,隐式传参,异步调用,本地调用
- IntelliJ IDEA平台下JNI编程(二)—类型映射
- ubuntu下安装深度学习python工具包keras
- 菜单查询,关联别的表