关闭

关于Fragment叠加点击穿透的解决方案

标签: Fragment事件Touch
1479人阅读 评论(0) 收藏 举报

项目中采用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;
    }


3.在onCreateView()方法中给要返回的view对象添加OnTouchListener,并把OnTouchListener里面的onTouch方法的返回值设置为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,截断点击时间段扩散
        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上层会响应下层的按钮点击事件,而且还会响应activity中的点击事件。在每个fragment布局的根节点加一条android:clickable="true"可破。
  • Coco_Wonderful
  • Coco_Wonderful
  • 2015-05-27 20:26
  • 3706

关于fragment点击能穿透问题

本人在做项目的过程中遇到的这个问题,然后就在网上百度了一下,之后也是在csdn上看到博友发过此类问题的解决办法,所以特此重新总结一下,顺便也给自己提个醒,避免出现此类问题。好!下面我们说一下问题: 举例:当我们建立一个fragment A的时候需要点击跳转到fragment B中,为了返回...
  • kfuxydnod6
  • kfuxydnod6
  • 2015-07-16 08:44
  • 3145

关于Fragment叠加点击穿透的解决方案

项目中采用Activity配合Fragment来完善整体布局框架,但是当多个Fragment添加进Fragment栈时,由于处于栈底的Fragment绑定了点击跟滑动监听事件,当新的Fragment添加进栈的时候,虽然上层的Fragment并没有实现任何监听事件,当时当用户触摸或者在屏幕上滑动的时候...
  • xieluoxixi
  • xieluoxixi
  • 2017-01-03 11:12
  • 1479

Fragment 点击穿透 解决办法

在做项目,用activity+fragment 填充视图时, 发现有些Fragment会存在点击穿透效果(就是底层的Fragment可以响应上层的触摸以及点击事件) 但是当填充的Fragment的跟布局是ScrollView时就不会有这种现象。 比如:当我们建立一个fragment...
  • shao941122
  • shao941122
  • 2015-11-10 14:06
  • 2258

解决Fragment内点击穿透问题

问题描述: 从A fragment跳转到B fragment ,为了返回时不从新加载A fragment内容,通常使用add方法来将a添加到后退栈. 但是这样会出现一个小问题: 在B Fragment 中点击一个空白区域,如果A Fragment的该位置正好有一个可以点击的控件,则A Fragmen...
  • z469441432
  • z469441432
  • 2015-01-23 11:21
  • 2967

Android开发技术点2——Fragment叠加点击穿透解决方案

Fragment, 点击穿透
  • dong19870625
  • dong19870625
  • 2016-01-20 18:02
  • 2361

Android中fragment实现按钮点击事件

fragment无法直接进行点击事件,需要放到oncreatActivity中 方法如下: public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { r...
  • u012804180
  • u012804180
  • 2015-12-20 16:51
  • 4581

fragment中设置点击事件(onclick)使用intent进行通信

今天在学习安卓的过程中,需要实现一个功能通信,就是需要在一个fragment中设置一个按钮,点击之后会跳转到一个新的页面,我首先想到是给按钮设置一个onclick属性, 按照以往写了这样的代码 public void toneed(View view){ ntent intent_ton...
  • sinat_33921105
  • sinat_33921105
  • 2017-01-01 20:33
  • 1820

fragment点击事件穿透问题

叠在一起的fragment上层会响应下层的按钮点击事件,而且还会响应activity中的点击事件。在每个fragment布局的根节点加一条android:clickable="true"可破
  • PsEmperor
  • PsEmperor
  • 2016-09-05 16:26
  • 961

解决ViewPager嵌套Fragment内部点击事件无响应问题

之前一直在找关于ViewPager Fragment之间的问题,然后找了很久都不是很理想。感觉都快疯了,后来找到在老大的指点下找到了一篇文章解决了这个问题,和老大相比找了很久我就绝望了对这个不抱有信心了,老大一开始也不知道,但是他在耐心的找问题,一个一个排除,一种一种方法试。最后偶然的情况下发现这篇...
  • qq_24362827
  • qq_24362827
  • 2015-06-29 18:27
  • 2022
    个人资料
    • 访问:104922次
    • 积分:2037
    • 等级:
    • 排名:千里之外
    • 原创:102篇
    • 转载:2篇
    • 译文:0篇
    • 评论:9条
    我的微博
    友情链接
    最新评论