Android 添加Fragment的onTouchEvent監聽

原文鏈接:https://blog.csdn.net/zhangphil/article/details/82862086


Android原生的Fragment不像Activity一樣有onTouchEvent這樣的觸摸事件監聽,但是可以間接實現。實現的步驟:

第一,首先在Fragment依附的Activity(假設這個Activity名爲MainActivity)中增加接口和分發onTouchEvent:

  private ArrayList<FragmentTouchListener> mFragmentTouchListeners = new ArrayList<>();
 
  
    public void registerFragmentTouchListener(FragmentTouchListener listener) {
        mFragmentTouchListeners.add(listener);
    }
 
  
    public void unRegisterFragmentTouchListener(FragmentTouchListener listener) {
        mFragmentTouchListeners.remove(listener);
    }
 
    @Override
    public boolean dispatchTouchEvent(MotionEvent event) {
        for (FragmentTouchListener listener : mFragmentTouchListeners) {
            listener.onTouchEvent(event);
        }
 
        return super.dispatchTouchEvent(event);
    }
 
    public interface FragmentTouchListener {
     
        boolean onTouchEvent(MotionEvent event);
    }

 
 
第二,在Fragment中主動註冊(View創建成功後,比如在onViewCreated函數回調裏面)和註銷之前在Activity中定義的FragmentTouchListener:

註冊:

((MainActivity) this.getActivity()).registerFragmentTouchListener(fragmentTouchListener);
註銷(在onDestory中):

((MainActivity) this.getActivity()).unRegisterFragmentTouchListener(fragmentTouchListener);

第三,接着就可以在Fragment中的FragmentTouchListener(fragmentTouchListener對象)裏面的onTouchEvent中捕獲和監聽觸摸點擊事件了,fragmentTouchListener監聽Fragment觸摸事件,具體的就是在onTouchEvent裏面捕獲和監聽MotionEvent:

MainActivity.FragmentTouchListener fragmentTouchListener = new MainActivity.FragmentTouchListener() {
        @Override
        public boolean onTouchEvent(MotionEvent event) {
                return false;
        }
    };


 

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