安卓 - 检测活动是否由屏幕方向更改而启动

4
有没有一种合理的方式可以检测到Activity是由于屏幕方向改变而重新启动,还是仅仅因为收到了Intent而启动?
在我的应用程序中,我有一个FragmentActivity,其中包含两个Fragment。用户可以使用ActionBar选项卡在这些Fragment之间导航。 还提供了一种方法,即Intent可以携带EXTRA,以保存要选择的默认选项卡的指示器。因此,当Activity启动时,可以通过EXTRA确定任何两个选项卡中的任何一个为默认选项卡。
问题出现在用户从默认选定的选项卡导航到其他选项卡时。在旋转更改时,Activity会重新启动,从EXTRA再次选择默认选项卡,而不是选择用户导航到的选项卡。
2个回答

4

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

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

在 onCreate 中获取值

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

2
这可能解决了@jaibatrik的问题,但并没有回答主要问题:如何检测活动是否由于屏幕方向更改而启动。 - infografnet
1
如果您发现savedInstanceState不为null,那就意味着Activity由于方向更改而重新启动了。 - jaibatrik
@jaibatrik 是的,虽然我从来没有注意过。没错。 - Darpan
5
@jaibatrik savedInstanceState 在其他情况下也可能是非空的...例如,如果Android操作系统在后台因内存不足而终止了活动,则会出现这种情况。这与“配置更改”不同。 - Alex Lockwood
您可以将activity.isChangingConfigurations的布尔值存储在savedInstanceState中。 - giorgos.nl
显示剩余3条评论

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接