1. 程式人生 > >Android開發技術點2——Fragment疊加點選穿透解決方案

Android開發技術點2——Fragment疊加點選穿透解決方案

當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,這會讓根佈局把點選事件吃掉,以防止事件會繼續傳遞下去,造成上面的情況。