Android開發技術點2——Fragment疊加點選穿透解決方案
阿新 • • 發佈:2019-02-07
當Fragment棧中有多個add Fragment時,點選最上層Fragment時的空白處,如果對應的下層Fragment中存在按鈕或其他事件,那麼奇妙的事情就發生了,會穿透點選到下方的事件,不可否認,這是我們不願意看到的。
究其原因:Fragment的本質就是一個View佈局的管理器,當Fragment attach到Activity時,其實就是把Fragment#onCreateView()返回的View,替換掉(如果是用replace)FragmentTransaction#replace中指定的View,或者新增到(如果是add)FragmentTransaction#add()中指定的ViewGroup裡面。
當我們以層疊方式顯示多個Fragment時,通常的做法就是弄一個FrameLayout,然後每次把Fragment add到此佈局。因此,這時Activity的頁面佈局樹實際上就是一個FrameLayout裡面包含幾個View。
所以,當點選上面Fragment的空白區域時,如果事件沒被吃掉,就會向下傳遞。
解決方案:
建立BaseFragement
public class BaseFragment extends Fragment implements View.OnTouchListener{
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
// 攔截觸控事件,防止洩露下去
view.setOnTouchListener(this);
}
@Override
public boolean onTouch(View v, MotionEvent event) {
return true;
}
}
其他Fragment可以繼承BaseFragment,這會讓根佈局把點選事件吃掉,以防止事件會繼續傳遞下去,造成上面的情況。