【问题标题】:Android - Detect if activity start due to screen orientation changeAndroid - 检测活动是否因屏幕方向变化而开始
【发布时间】:2012-09-11 11:24:29
【问题描述】:

是否有一种健全的方法可以检测Activity 是由于屏幕方向更改而重新启动,还是仅仅因为Intent 到达而启动?

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    并在 onCreate 中获取值

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

    【讨论】:

    • 这可能解决了@jaibatrik 的问题,但没有回答主要问题:检测活动是否因屏幕方向变化而开始
    • 如果您发现savedInstanceState 不是null,则表示由于方​​向更改,Activity 已重新启动。
    • @jaibatrik 没错,但从未关注过它。这是真的。
    • 而且,即使我们没有在其中设置任何内容,savedInstanceState 也不会是 null
    • @jaibatrik savedInstanceState 在其他情况下也可能为非空......例如,如果 Android 操作系统在后台因为内存不足而终止了活动。这与“配置更改”不同。
    【解决方案2】:

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

    在您的 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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多