美文网首页
关于fragment切换显示重叠且事件穿透问题解决方法

关于fragment切换显示重叠且事件穿透问题解决方法

作者: 春生_7291 | 来源:发表于2019-08-26 19:03 被阅读0次

    1.问题说明

    在项目中使用了 'me.yokeyword:fragmentation:1.3.4' 一个封装比较完善的 fragment库,做了一个类似微信主界面的功能(一个Activity +n个Fragment) ,点击下面按钮可以切换fragment的show和hide,但是出现了一个不容易重现的bug,效果是这样的,在当前fragmentA切换到另一个fragmentB 时,fragmentA并没有hide,导致fragmentB覆盖在fragmentA上,点击fragmentB某处区域(当前区域没有设置事件),但会触发fragmentA相同位置的事件。

    2.解决方法

    一.布局重叠问题

    fragmentA如果布局无显示内容或者根布局不设置background,就会较大几率出现 fragmentB重叠在fragmentA上,因此解决布局重叠问题 :
    1 如果布局无显示内容,就添加一个新布局用于显示;或者
    2 根布局设置非transparent的background即可。

    二.事件穿透问题

    当出现上述布局重叠时,上面fragment事件就会 穿透到下面的fragment中,解决方法就是消费当前fragment,不让事件继续传递。
    我这里fragment 都是继承于BaseFragment ,统一在BaseFragment中处理即可,

        @Nullable
        @Override
        public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
            View view = inflater.inflate(getLayoutId(), container, false);
            view.setOnTouchListener(this);
            return view;
        }
    
        // onTouch事件 将上层的触摸事件拦截
        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {
            return true;
        }
    
    

    当然 BaseFragment 需要 implements View.OnTouchListener

    参考
    Fragment Touch事件泄露

    相关文章

      网友评论

          本文标题:关于fragment切换显示重叠且事件穿透问题解决方法

          本文链接:https://www.haomeiwen.com/subject/vagdectx.html