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

时间:2012-09-11 11:24:29

标签: android android-intent android-fragments android-activity android-actionbar

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

在我的应用程序中,我有一个FragmentActivity,其中包含两个Fragment个。用户可以使用Fragment标签在这些ActionBar之间导航。 还规定,此Intent的{​​{1}}可以带有Activity,可以将指示符保存到要选择的默认选项卡。因此,当EXTRA开始时,默认情况下可以选择Activity确定的两个标签中的任何一个。

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

2 个答案:

答案 0 :(得分:4)

通过onSaveInstanceState发送选定的标签名称

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

并获取onCreate

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

答案 1 :(得分:-1)

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

使用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()方法,允许您自己处理屏幕旋转。它将不再杀死并重新启动您的活动。