1.問題說明
在項目中使用了 'me.yokeyword:fragmentation:1.3.4' 一個封裝比較完善的 fragment庫,做了一個類似微信主界面的功能(一個Activity +n個Fragment) ,點擊下面按鈕可以切換fragment的show和hide,但是出現(xiàn)了一個不容易重現(xiàn)的bug,效果是這樣的,在當(dāng)前fragmentA切換到另一個fragmentB 時,fragmentA并沒有hide,導(dǎo)致fragmentB覆蓋在fragmentA上,點擊fragmentB某處區(qū)域(當(dāng)前區(qū)域沒有設(shè)置事件),但會觸發(fā)fragmentA相同位置的事件。
2.解決方法
一.布局重疊問題
fragmentA如果布局無顯示內(nèi)容或者根布局不設(shè)置background,就會較大幾率出現(xiàn) fragmentB重疊在fragmentA上,因此解決布局重疊問題 :
1 如果布局無顯示內(nèi)容,就添加一個新布局用于顯示;或者
2 根布局設(shè)置非transparent的background即可。
二.事件穿透問題
當(dāng)出現(xiàn)上述布局重疊時,上面fragment事件就會 穿透到下面的fragment中,解決方法就是消費當(dāng)前fragment,不讓事件繼續(xù)傳遞。
我這里fragment 都是繼承于BaseFragment ,統(tǒng)一在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;
}
當(dāng)然 BaseFragment 需要 implements View.OnTouchListener