gpt4 book ai didi

android - 禁用 OrientationEventListener 时调用 onOrientationChanged()

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:27:25 26 4
gpt4 key购买 nike

我在报告事件时遇到了 OrientationEventListener 问题,即使在我禁用它之后也是如此。

我正在使用选项卡布局中的三个 fragment ,只有一个 fragment 需要更改方向。当我离开这个 fragment 时,我希望方向事件停止产生影响。

我的代码的生命周期部分如下:

@Override
public void onActivityCreated(Bundle savedInstanceState)
{
super.onActivityCreated(savedInstanceState);

if (orientationEventListener == null)
{
Log.w(LogTags.MOBILE_MONITOR, "Creating orientationListener in " + this.toString());
orientationEventListener = new OrientationEventListener(getActivity(), SensorManager.SENSOR_DELAY_NORMAL) {
@Override
public void onOrientationChanged(int angle) {

...Do work using getActivity()...

}
};
}

}

@Override
public void onResume() {
super.onResume();
orientationEventListener.enable();
}

@Override
public void onPause() {
super.onPause();
orientationEventListener.disable();
}

当我在移动设备时切换 fragment 时出现问题。当我尝试在 OrientationEventListeneronOrientationChanged(int angle) 中调用 getActivity() 时,调用返回 null,这意味着我得到一个 null如果我尝试使用它,指针异常。

虽然我可以在此处添加空检查,但我只想知道为什么在我已明确禁用监听器时会收到定向事件。如果我在故障点检查 OrientationEventListener,它甚至会报告 mEnabled=false。有什么办法可以防止事件传播到我的听众?

最佳答案

如果您将方向设置为 ActivityInfo.SCREEN_ORIENTATION_SENSOR, Activity 将由物理方向传感器自动旋转。 https://developer.android.com/reference/android/R.attr.html#screenOrientation

通过重置 Activity 的方向模式来解决此问题。例如,重置为默认纵向布局:

mOrientationEventListener.disable();
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

关于android - 禁用 OrientationEventListener 时调用 onOrientationChanged(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17179835/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com