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
网友评论