我有一个TabActivity这是我的应用程序中的“基本”Activity。从TabActivity中,用户可以浏览不属于原始tabhost一部分的新活动(我没有搞乱tabgroup或类似的东西)。
我的应用程序还有一个全局选项菜单,用户应该可以从中导航回原来的TabActivity并选择某个选项卡。例如,如果用户选择了最左边的选项菜单项,他们将转到原始TabActivity中最左边的选项卡。
我怎样才能做到这一点?我不想启动一个新的TabActivity,因为原来的TabActivity上有像地图点和列表视图一样的数据。理想情况下,我想回到那个特定的TabActivity。这种移动也可以在生命周期的任何时候发生,例如:
原始TabActivity->活动1->活动2->活动3->活动N->返回原始TabActivity
原始TabActivity->活动1->返回原始TabActivity
导航之间可以启动任意数量的活动。因此,在当前活动中调用finish()不会满足这一点(据我所知…)。
我的问题/担忧:
首先,如何做到这一点。
由于内存的原因,原始的TabActivity可能会从堆栈中删除,对吗?如果是,怎么处理?我想如果我找到了一种定位原始TabActivity的方法,我可以只检查null,如果不存在,就启动一个新的TabActivity

最佳答案

明白了。您应该在清单中使用launchMode="singleTask"来指定要切换回的Activity。根据Dev docs,如果存在,则返回到那个特定的Activity
所以,在我的名单上,我有:

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

然后,在您想切换回Activity的任何TabActivity中,只需调用一个normalIntent。您还可以使用putExtra()告诉TabActivity切换到新选项卡。
在子活动中:
        Intent mainTabsSearchIntent = new Intent(this, MainTabsActivity.class);
        mainTabsSearchIntent.putExtra("tabval", 0);
        startActivity(mainTabsSearchIntent);

如果堆栈没有新的MainTabsActivity,这将启动一个新的launchMode="singleTask",或者由于onNewIntent(Intent intent)参数而切换回旧实例。
为了提供制表符切换功能,在mainTabActivity中重写,如下所示:
@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"));
    }
}

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

关于android - 从另一个 Activity 移回上一个 Activity ,不知道 Activity 在堆栈中的位置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6362275/

10-09 00:08