Android 中 Fragment 添加 onTouchEvent 监听
Android 原生的 Fragment 不像 Activity 一样有 onTouchEvent 这样的触摸事件监听,但是可以间接实现。
1、首先在 Fragment 关联的 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);
}
2、在 Fragment 中主动注册和注销之前在的 FragmentTouchListener
当 Activity 的View创建成功后,在 onViewCreated() 中注册,如下:
((MainActivity) this.getActivity()).registerFragmentTouchListener(fragmentTouchListener);
在 onDestory() 中注销:
((MainActivity) this.getActivity()).unRegisterFragmentTouchListener(fragmentTouchListener);
3、在 Fragment 中的 FragmentTouchListener 的 onTouchEvent 中捕获和监听触摸点击事件
fragmentTouchListener 监听 Fragment 触摸事件,具体的就是在 onTouchEvent 里面捕获和监听 MotionEvent,如下:
MainActivity.FragmentTouchListener fragmentTouchListener = new MainActivity.FragmentTouchListener() {
@Override
public boolean onTouchEvent(MotionEvent event) {
return false;
}
};