繁体   English   中英

Android - 检测活动是否因屏幕方向更改而启动

[英]Android - Detect if activity start due to screen orientation change

是否有一种理智的方式,我们可以检测是否由于屏幕方向更改而重新启动Activity或者仅仅因为Intent已到达而启动了Activity

在我的应用程序中,我有一个FragmentActivity ,它包含两个Fragment 用户可以使用ActionBar选项卡在这些Fragment之间导航。 还规定对此ActivityIntent可以携带EXTRA ,该EXTRA可以将指示器保存到要选择的默认选项卡。 因此,当Activity启动时,默认情况下可以选择EXTRA确定的两个选项卡中的任何一个。

当用户从默认选定选项卡导航到其他选项卡时,会发生此问题。 在轮换更改时,将重新启动“ Activity ,从而再次从EXTRA选择默认选项卡,而不选择用户导航到的选项卡。

通过onSaveInstanceState发送选定的选项卡名称

protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putString("tabName", "tab1");
}

并获取onCreate中的值

if (savedInstanceState != null) {
            String tabname = savedInstanceState.getString("tabName");
        }

创建一个全局标志,指示用户当前所在的选项卡。

onPause()onStop()方法中更新它。

您可以从onStart()onRestart()方法再次设置它。

有关进一步参考,请查看http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle

如果您不喜欢Android处理屏幕旋转的默认方法,您可以自己动手。 在AndroidManifest.xml文件中为您的活动设置android:ConfigChanges属性:

<activity android:name="com.myapp.MyActivity"
      android:label="@string/app_name"
      android:configChanges="orientation"
      >
<intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
</intent-filter>

这里,android:configChanges中的orientation标志告诉系统Activity希望自己处理旋转。 Android将调用Activity的onConfigurationChanged()方法,允许您自己处理屏幕旋转。 它将不再杀死并重新启动您的活动。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM