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