我有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);
}
答案 0 :(得分:1)
根据一些因素,您可以覆盖Fragments
中的setUserVisibilityHint()。如果您将Fragments
添加到FragmentPagerAdapter
或FragmentStatePagerAdapter
,这些适配器会在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);
}
}