禁用 OrientationEventListener 时调用 onOrientationChanged()

Posted

技术标签:

【中文标题】禁用 OrientationEventListener 时调用 onOrientationChanged()【英文标题】:onOrientationChanged() is being called when OrientationEventListener is disabled 【发布时间】:2013-06-15 07:32:46 【问题描述】:

即使我禁用了 OrientationEventListener 报告事件,我也遇到了问题。

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

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

@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();

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

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

【问题讨论】:

嗨 Sleeke,你有没有找到任何解决方案。我也面临同样的问题。 【参考方案1】:

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

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

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

【讨论】:

以上是关于禁用 OrientationEventListener 时调用 onOrientationChanged()的主要内容,如果未能解决你的问题,请参考以下文章

JS禁用右键+禁用Ctrl+u+禁用F12

如何禁用a标签,是禁用事件,而不是啥阻止跳转之类的

jQuery禁用快捷键例如禁用F5刷新 禁用右键菜单等

jQuery禁用快捷键例如禁用F5刷新 禁用右键菜单等

如何在 Laravel 中禁用 CSRF 令牌以及为啥我们必须禁用它?

CDR被禁用后功能有影响不