• fragment如何获取activity的点击事件


     

            如今在activity中使用fragment的布局非常常见,那么如果想在fragment获取activity点击事件,如何获得呢?

            今天要做一个功能,即fragment中有一个弹框,需要在整个activity被触摸时将该弹框进行隐藏,但是在fragment中的view只能获取到fragment被触摸的事件,而不能直接获取activity的触摸事件,如果想要获取activity的触摸事件,我们可以通过回调的方式在fragment中获取到activity的触摸事件,然后做相应操作。

    具体操作如下:

    一、定义接口

    先定义一个接口

    public interface FragmentKeyEventListener {
        void onFragmentKeyEvent(MotionEvent event);
    }

     二、在需要获取activity触摸事件的Fragment中implements该接口,并实现该接口方法。

    public class WallpaperFragment implements FragmentKeyEventListener{

    ............................

        @Override
        public void onFragmentKeyEvent(MotionEvent event) {
                
         //do something what you want to do

        }

    ............................
    }

    三、在activity中提供setFragmentKeyEventListener()方法,给fragment调用,用来设置监听器mFragmentKeyEventListener。该监听器持有onFragmentKeyEvent()方法,在activity被触摸后,就会自动调用到dispatchTouchEvent()方法,在该方法中使用监听器调用onFragmentKeyEvent()方法,即可回调到步骤二中在fragment中实现的onFragmentKeyEvent()方法,并执行fragment中的onFragmentKeyEvent()方法的具体操作,代码如下:

    public class MainActivity{

    private FragmentKeyEventListener mFragmentKeyEventListener;

    //给fragment提供方法,用来设置监听器
    public void setFragmentKeyEventListener(WallpaperFragment wallpaperFragment) {
            this.mFragmentKeyEventListener = wallpaperFragment;
     }

    //activity中获取到的触摸事件通过监听器回调给fragment(即每次activity被触摸之后,
      将该触摸事件通过设置好的监听器传给fragment)
        @Override
        public boolean dispatchTouchEvent(MotionEvent ev) {       
                if (mFragmentKeyEventListener != null) {
                    mFragmentKeyEventListener.onFragmentKeyEvent(ev);
                }
            return super.dispatchTouchEvent(ev);
        }

    }

     

    四、在fragment中拿到activity的实例,然后用该activity实例调用setFragmentKeyEventListener(this)方法设置步骤三中的监听器。

    @Override
    public void onResume() {
       super.onResume();
       ((MainActivity) mActivity).setFragmentKeyEventListener(this);
    }

            使用以上四步即可完成在fragment获取activity点击事件的需求。

  • 相关阅读:
    【面试经典150 | 数学】Pow(x, n)
    多功能音频工具的旗舰音乐编辑工具!Music Studio
    电力系统经济调度(Matlab代码实现)
    聊聊 从源码来看ChatGLM-6B的模型结构
    SSM+阳光大学宿舍管理系统 毕业设计-附源码211714
    【SpringBoot】68、SpringBoot解决HttpServletRequest中输入流不能重复读的问题
    【附源码】Python计算机毕业设计实验室耗材管理系统
    YOLOv8轻量化模型:模型轻量化设计 | 轻量级可重参化EfficientRepBiPAN | 来自YOLOv6思想
    8. sqoop-1.4.7安装部署
    桥梁安全在线监测预警系统解决方案
  • 原文地址:https://blog.csdn.net/weixin_42433094/article/details/126177332