關於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事件泄露

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章