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;
}
};
完