![](/img/trans.png)
[英]Show AlertDialog on Activity start, but not on screen orientation change?
[英]Android - Detect if activity start due to screen orientation change
是否有一种理智的方式,我们可以检测是否由于屏幕方向更改而重新启动Activity
或者仅仅因为Intent
已到达而启动了Activity
?
在我的应用程序中,我有一个FragmentActivity
,它包含两个Fragment
。 用户可以使用ActionBar
选项卡在这些Fragment
之间导航。 还规定对此Activity
的Intent
可以携带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.