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

标签 android android-intent android-tabhost

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

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

我怎样才能完成这个行为?我不想想要启动一个新的TabActivity,因为原始的TabActivity有像 map 点和ListView这样的数据传播。理想情况下,我想返回到特定的 TabActivity。这种移动也可以发生在生命周期中的任何点,例如:

原始TabActivity -> Activity1 -> Activity2 -> Activity3 -> Activity n ->返回原始TabActivity

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

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

我的问题/疑虑:

  1. 主要是如何实现这一目标。
  2. 由于内存的原因,原始 TabActivity 可能会从堆栈中删除,对吗?如果是的话,该如何处理?我假设如果我找到了找到原始 TabActivity 的方法,我只需检查 null 即可,如果它不存在,则启动一个新的 TabActivity

最佳答案

明白了这一点。您应该在 list 中针对您希望切换回的特定 Activity 使用 launchMode="singleTask"。根据Dev docs这会路由回特定的Activity(如果存在)。

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

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

然后,在您想要切换回该 TabActivity 的任何 Activity 中,只需调用普通的 Intent 即可。您还可以使用 putExtra() 告诉 TabActivity 切换到新选项卡。

在子 Activity 中:

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

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

为了提供选项卡切换功能,请在主 TabActivity 中重写 onNewIntent(Intent Intent),如下所示:

@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/

相关文章:

java - 在 Android 中录制声音时出错

Android PDF Writer 在 WRAP_CONTENT 时忽略我的 View 高度

带有 Google Cloud Datastore 的 Android 应用程序

java - 难以理解 Intent 如何运作

android - (Android) 如何更改 tabWidget 中选项卡的大小?

Android 4.1 MediaCodec 支持的分辨率

android - 如果应用程序未至少启动一次,则广播接收器无法在 ICS 中工作

java - Dropbox 应用程序如何访问我的应用程序缓存? (安卓)

android - 创建具有自定义设计的选项卡小部件

android - Android 中TabHost 的所有选项卡中常见的底部布局?