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

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切换显示重叠且事件穿透问题解决方法)