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

Android 从另一个活动移回上一个活动,不知道活动在堆栈中的位置,android,android-intent,android-tabhost,Android,Android Intent,Android Tabhost,我有一个TabActivity,它是我的应用程序中的基本活动。通过TabActivity,用户可以浏览不是原始TabHost一部分的新活动,我不想与TabGroups之类的东西混在一起 我的应用程序还有一个全局选项菜单,用户应该能够从中导航回原始选项卡Activity并选择某个选项卡。例如,如果用户选择了最左侧的选项菜单项,他们将转到原始选项卡活动中最左侧的选项卡 我怎样才能完成这个行为?我不想启动一个新的TabActivity,因为原始的TabActivity上有像映射点和ListView这样

我有一个TabActivity,它是我的应用程序中的基本活动。通过TabActivity,用户可以浏览不是原始TabHost一部分的新活动,我不想与TabGroups之类的东西混在一起

我的应用程序还有一个全局选项菜单,用户应该能够从中导航回原始选项卡Activity并选择某个选项卡。例如,如果用户选择了最左侧的选项菜单项,他们将转到原始选项卡活动中最左侧的选项卡

我怎样才能完成这个行为?我不想启动一个新的TabActivity,因为原始的TabActivity上有像映射点和ListView这样的数据。理想情况下,我想回到具体的活动。此移动也可能发生在生命周期中的任何时间点,例如:

原始选项卡Activity->Activity1->Activity2->Activity3->Activity n->返回原始选项卡Activity

原始TabActivity->Activity1->返回原始TabActivity

在导航之间可以启动任意数量的活动。因此,据我所知,在当前活动中调用finish不能满足这一要求

我的问题/关注:

主要是如何做到这一点。 由于内存原因,原始TabActivity可能会从堆栈中删除,对吗?如果是,如何处理?我假设如果我找到了一种定位原始TabActivity的方法,我可以只检查null,如果不存在,就启动一个新的TabActivity。
我明白了。对于要切换回的特定活动,应在清单中使用launchMode=singleTask。根据这条路线,如果该活动存在,则返回到该特定活动

因此,在我的清单中,我有:

    <activity
        android:name=".MainTabsActivity"
        android:launchMode="singleTask"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.NoTitleBar" >
    </activity>
如果堆栈没有MainTabsActivity,这将启动新的MainTabsActivity,或者由于launchMode=singleTask参数而切换回旧实例

为了提供选项卡切换功能,请在主选项卡Activity中覆盖onNewIntentIntent意图,如下所示:


我希望这能帮助那些有类似问题的人。

哇!只是在清单中添加了一行android:launchMode=singleTask就帮了我的忙。谢谢Rockmaninoff!我已经为此搜索了一个多小时。这正是我当前场景的问题!
        Intent mainTabsSearchIntent = new Intent(this, MainTabsActivity.class);
        mainTabsSearchIntent.putExtra("tabval", 0);
        startActivity(mainTabsSearchIntent);
@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"));
    }
}