4

是否有一种理智的方法可以检测 anActivity是否由于屏幕方向更改而重新启动,或者它只是因为 anIntent到达而启动?

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

当用户从默认选择的选项卡导航到另一个选项卡时,就会出现此问题。在旋转更改时,将Activity重新启动以再次选择默认选项卡,EXTRA而不是选择用户导航到的选项卡。

4

2 回答 2

4

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

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

并在 onCreate 中获取值

if (savedInstanceState != null) {
            String tabname = savedInstanceState.getString("tabName");
        }
于 2012-09-11T11:32:39.867 回答
-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 中的方向标志告诉系统 Activity 希望自己处理旋转。Android 将调用您的 Activity 的 onConfigurationChanged() 方法,这允许您自己处理屏幕旋转。它不会再杀死并重新启动您的活动。

于 2012-09-11T11:37:27.007 回答