我的TabActivity
是我应用程序中的“基础”Activity
。从TabActivity
开始,用户可以浏览不属于原始TabHost的新活动(我不会搞乱TabGroups或类似的东西)。
我的应用程序还有一个全局选项菜单,用户应该可以从中导航回原始TabActivity
并选择某个选项卡。例如,如果用户选择了最左侧的选项菜单项,则会转到原始TabActivity
中最左侧的标签。
我该如何完成此行为?我不想要开始一个新的TabActivity
,因为原始TabActivity
上传有数据,如地图点和ListView。理想情况下,我想回到具体的TabActivity
。这种移动也可以在生命周期的任何时刻发生,例如:
原始TabActivity
- >活动1 - >活动2 - >活动3 - >活动 n - >返回原始TabActivity
原始TabActivity
- >活动1 - >返回原始TabActivity
导航之间可以启动任意数量的活动。因此,在当前活动中调用finish()
将无法满足此要求(据我所知......)。
我的问题/疑虑:
TabActivity
可能因内存而从堆栈中删除,对吗?如果是这样,如何处理?我假设如果我找到了找到原始TabActivity
的方法,我可以检查null,如果不存在,请启动新的TabActivity
。答案 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"));
}
}
我希望这有助于有类似问题的人。