【问题标题】:how to run code in fragment only if it is visible to user仅当用户可见时如何在片段中运行代码
【发布时间】:2017-11-08 19:39:24
【问题描述】:

我有 4 个片段,在每个片段中我都想使用加速度计来做不同的事情。我的问题是,当我滑动到第二个片段并摇动我的手机时,它会从第一个片段运行代码,因为它是同一活动的一部分。我覆盖了 onResume 和 onPause 方法,但它不能正常工作(仅当我滑动到片段 3 而不是传感器未注册时才有效。我在 onSensorChanged 方法中尝试了一些 if 函数并放置了一些公共静态 int fragmentPageNumber 并将其更改为 onCreate 方法每个片段,但是当活动开始时它会更改为片段 2,所以我必须通过片段滑动代码才能开始正常工作......但我认为问题在于正确覆盖 onResume 和 onPause 方法......

@Override
public void onResume() {
    super.onResume();
    sensorManager.registerListener(accelerometerEventListener, accelerometerSensor, SensorManager.SENSOR_DELAY_GAME);
}

@Override
public void onPause() {
    super.onPause();
    sensorManager.unregisterListener(accelerometerEventListener);
}

【问题讨论】:

    标签: android android-fragments


    【解决方案1】:

    根据几个因素,您也许可以在您的Fragments 中覆盖setUserVisibilityHint()。如果您的Fragments 被添加到FragmentPagerAdapterFragmentStatePagerAdapter,则当Fragment 可见时,这些适配器将在Fragment 上调用此方法。在您的情况下,在您的Fragments 中,您可以执行以下操作:

        @Override
        public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if(isVisibleToUser){
            sensorManager.registerListener(accelerometerEventListener, accelerometerSensor, SensorManager.SENSOR_DELAY_GAME);
        } else {
            sensorManager.unregisterListener(accelerometerEventListener);
        }
    }
    

    【讨论】:

    • 这对我有用 tnx,我刚刚添加了 isVisibleToUser && accelerometerEventListener != null
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 2014-03-17
    • 2022-08-04
    • 2021-11-21
    相关资源
    最近更新 更多