我有一个 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()
无法满足此要求(据我所知......)。
我的问题/疑虑:
- 主要是如何实现这一目标。
- 由于内存的原因,原始
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/