crv*_*crv 43 tabs android android-intent
目前我有一个TabHost实现了3个选项卡,每个选项卡包含一个单独的活动.我的问题是如何在选项卡主机内的一个活动中切换选项卡.我到处寻找并找不到这个问题的真正答案是不成功的.
crv*_*crv 94
经过长时间的这个问题的斗争,我已经能够找到一个解决方案,在使用基于活动的选项卡时切换选项卡.
在创建tabhost的父活动类中,我实现了如下所示的方法:
public void switchTab(int tab){
tabHost.setCurrentTab(tab);
}
Run Code Online (Sandbox Code Playgroud)
在我希望能够在内部切换到另一个选项卡的选项卡内部,我创建了以下方法:
public void switchTabInActivity(int indexTabToSwitchTo){
MintTrack parentActivity;
parentActivity = (MintTrack) this.getParent();
parentActivity.switchTab(indexTabToSwitchTo);
}
Run Code Online (Sandbox Code Playgroud)
如果您想要这个代码的一个很好的例子,您可以在这里和这里看看我的MintTrack项目.
作为旁注,在决定是否使用基于视图或活动的TabHost时请务必小心.
Activity基于标签很有用,因为它们可以分成自己的XML文件.活动也可以组织到自己的Java文件中,而不是混杂在一起.可以说,你会想到的一些事情很容易变得复杂,基于活动的标签.很难在标签之间传递信息而不会产生开销. Activity基于标签的选项卡也使用更多的内存/ CPU时间,因为它们具有Activity围绕每个标签的开销.在深入使用Activity基础之前,请考虑这个和更多的权衡TabHost.我现在知道,TabHost如果我再次使用它,我会亲自去看一个视图.
小智 10
我遇到了同样的问题.虽然所有标签的单个活动会更好,但有时采取简单的方法是合理的选择.
为了避免在选项卡想要更改为另一个选项卡时创建新的选项卡活动,我将其放在AndroidManifest.xml中:
<activity android:name=".MyTabsActivity"
android:label="Tabs!"
android:launchMode="singleTask">
Run Code Online (Sandbox Code Playgroud)
使用您想要的选项卡发送意图:
class OneTabContentActivity {
void switchTab() {
final Intent intent = new Intent(mContext, MyTabsActivity.class);
intent.setAction("Switch to tab 1, please");
mContext.startActivity(intent);
}
class MyTabsActivity {
@Override
protected void onNewIntent (Intent intent) {
super.onNewIntent(intent);
getTabHost().setCurrentTab(1);
}
}
Run Code Online (Sandbox Code Playgroud)
这个解决方案有缺点,但我不清楚细节.其他人可能知道足以指出他们.
首先,我为我的主类设置了一个方法,它扩展了TabActivity,让它称之为"MainActivity"
public TabHost getMyTabHost() { return tabHost; }
Run Code Online (Sandbox Code Playgroud)
然后,我添加了tab活动类;
MainActivity ta = (MainActivity) this.getParent();
TabHost th = ta.getMyTabHost();
th.setCurrentTab(0);
Run Code Online (Sandbox Code Playgroud)
它对我有用.
步骤1:使用更好的setContent()on 形式将tabs-holding-activities替换为tabs-holding-viewsTabSpec
第2步:致电setCurrentTab()您TabHost从内您的单Activity
我还没有看到有Activity一个选项卡的内容而不是简单的内容有任何好处View.有一个Activity作为选项卡的内容浪费CPU时间和内存(因此,电池寿命),并使你正在尝试做更困难的事情.