学而实习之 不亦乐乎

Android 中 Fragment 添加 onTouchEvent 监听

2023-09-14 07:47:04

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