Android - 在选项卡中的"活动"中切换选项卡

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)

这个解决方案有缺点,但我不清楚细节.其他人可能知道足以指出他们.


Ser*_*lal 6

首先,我为我的主类设置了一个方法,它扩展了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)

它对我有用.


Com*_*are 5

步骤1:使用更好的setContent()on 形式将tabs-holding-activities替换为tabs-holding-viewsTabSpec

第2步:致电setCurrentTab()TabHost从内您的单Activity

我还没有看到有Activity一个选项卡的内容而不是简单的内容有任何好处View.有一个Activity作为选项卡的内容浪费CPU时间和内存(因此,电池寿命),并使你正在尝试做更困难的事情.

  • Commons,我注意到你的答案往往是建议做一些完全不同于OP想要的事情,或者建议不要做他们正在尝试的事情.显然,你已经帮助过很多人了解并且知识渊博,但也许你会因此而被烧焦,并没有在你面前回答这个问题.只是一个想法. (2认同)