从另一个Activity移回上一个Activity,不知道Activity在堆栈中的位置

时间:2011-06-15 18:10:25

标签: android android-intent android-tabhost

我的TabActivity是我应用程序中的“基础”Activity。从TabActivity开始,用户可以浏览不属于原始TabHost的新活动(我不会搞乱TabGroups或类似的东西)。

我的应用程序还有一个全局选项菜单,用户应该可以从中导航回原始TabActivity并选择某个选项卡。例如,如果用户选择了最左侧的选项菜单项,则会转到原始TabActivity中最左侧的标签。

我该如何完成此行为?我想要开始一个新的TabActivity,因为原始TabActivity上传有数据,如地图点和ListView。理想情况下,我想回到具体的TabActivity。这种移动也可以在生命周期的任何时刻发生,例如:

原始TabActivity - >活动1 - >活动2 - >活动3 - >活动 n - >返回原始TabActivity

原始TabActivity - >活动1 - >返回原始TabActivity

导航之间可以启动任意数量的活动。因此,在当前活动中调用finish()将无法满足此要求(据我所知......)。

我的问题/疑虑:

  1. 主要是如何做到这一点。
  2. 可能原因TabActivity可能因内存而从堆栈中删除,对吗?如果是这样,如何处理?我假设如果我找到了找到原始TabActivity的方法,我可以检查null,如果不存在,请启动新的TabActivity

1 个答案:

答案 0 :(得分:4)

想出来了。您应该在清单中使用launchMode="singleTask"作为您希望切换回的特定Activity。根据{{​​3}},此路由会返回到特定Activity(如果存在)。

所以,在我的Manifest中,我有:

    <activity
        android:name=".MainTabsActivity"
        android:launchMode="singleTask"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.NoTitleBar" >
    </activity>

然后,在要切换回Activity的任何TabActivity中,只需调用普通Intent。您还可以使用putExtra()告诉TabActivity切换到新标签页。

在子活动中:

        Intent mainTabsSearchIntent = new Intent(this, MainTabsActivity.class);
        mainTabsSearchIntent.putExtra("tabval", 0);
        startActivity(mainTabsSearchIntent);

如果堆栈没有,则会启动新的MainTabsActivity,或者由于launchMode="singleTask"参数而切换回旧实例。

为了提供标签切换功能,请覆盖主onNewIntent(Intent intent)中的TabActivity,如下所示:

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    Log.d(MyApplication.TAG, "Bringing this Activity back!");

    Bundle extras = intent.getExtras();
    if (extras != null) {
        tabHost.setCurrentTab(extras.getInt("tabval"));
        Log.d(MyApplication.TAG, "Switching to tab " + extras.getInt("tabval"));
    }
}

我希望这有助于有类似问题的人。