如何更改TabSpec的意图

时间:2011-10-10 12:01:42

标签: android android-tabhost android-tabactivity

以下是该方案: 我有一个包含4个选项卡的活动,每个选项卡具有不同的意图,每个选项具有不同的活动。 效果很好。

我需要的是,以某种方式改变其中一个标签的意图。 它就像在TabSpec.setContent(intent)上使用的Intent中添加额外的参数一样简单,但我还没有找到一种方法来检索改变它的意图。

我要做的具体操作是:从另一个活动(在另一个标签的内容中)我称之为父(TabActivity)以打开另一个标签并添加一些自定义数据到该标签的活动。

我可以毫无问题地更改选项卡,但是我没有找到将额外参数从一个活动传递到另一个活动的方法,因为用于创建TabSpec的原始意图没有额外的参数。

我是以错误的方式接近这个吗?

有没有办法替换TabSpec内容的意图?

谢谢!

3 个答案:

答案 0 :(得分:1)

如果您只是想找到一种在活动之间传递值的方法,则可以覆盖Application类。

使用应用上下文的方式。

扩展应用程序类并将值添加为其属性。在任何活动中,如果您调用以下代码,它将返回单个。

MyApplication appContext = (MyApplication) getApplicationContext();

要完成此工作,您需要将其添加到清单文件的应用程序标记

 android:name=".MyApplication"

此方法用于在无法通过意图发送时在应用程序周围传递值。

要删除选项卡,您需要使用clearAllTabs()方法并再次添加选项卡。上面的代码应该更好。

答案 1 :(得分:1)

在我的情况下,我在TabActivity中存储对intent的引用

mGalleryTabIntent = new Intent(this, AnActivity.class);
spec = getTabHost().newTabSpec(TAB_GALLERY).setIndicator(res.getString(R.string.footer_gallery),res.getDrawable(R.drawable.gallery_icon_sel)).setContent(mGalleryTabIntent); 

public Intent getStoredTabIntent(){
    return mGalleryTabIntent;
  }

然后,当我从一个孩子开始,我想导航到另一个标签,传递一个额外的Intent

    MainTabActivity parent = (MainTabActivity)getParent();
    parent.getStoredTabIntent().putExtra(AnActivity.START_VIEW, AnActivity.PAGE_TWO);

    //Navigate to the tab
    parent.getTabHost().setCurrentTabByTag(AnActivity.TAB_GALLERY);

然后,在AnActivity的onCreate

Bundle extras = getIntent().getExtras();
if(extras != null && extras.containsKey(START_VIEW)){
  switch (extras.getInt(START_VIEW)) {
    case PAGE_TWO:
      doSomething();
      break;

    default:
      break;
  }

  //Erase the Extra so that navigating to this Tab always displays the standard view unless specified otherwise
  MainTabActivity parent = (MainTabActivity)getParent();
  parent.getStoredTabIntent().putExtra(AnActivity.START_VIEW, "");
}else{
  doStandardStuff();
}

应用程序解决方案也很好,但我认为我不需要其他任何东西,因此我宁愿坚持使用活动。

答案 2 :(得分:0)

TabSpec tabspec1;

private void createTabHost() {

    // initialize tabHost
    tabHost = (TabHost) this.findViewById(R.id.tabhost1);
    tabHost.setup(this.getLocalActivityManager());

    // create tab1
    Intent intent = new Intent(this, AnotherActivity.class).addFlags(
            Intent.FLAG_ACTIVITY_CLEAR_TOP);
    intent.putExtra("myData",
                ObjData);
    tabspec1 = tabHost.newTabSpec("tab1")
            .setIndicator(Utilities
                    .prepareTabView(this, "Title"))
            .setContent(intent);
    tabHost.addTab(tabspec1 );

    // create tab2
       ...
}

更改标签中放置的活动内容的方法:

private void reloadTabSpec1() {

        Intent i = new Intent(this, AnotherActivity.class).addFlags(
                Intent.FLAG_ACTIVITY_CLEAR_TOP);
        i.putExtra("myData", ObjData);
        tabspec1.setContent(i);

        // needed for refresh :(
        tabHost.setCurrentTabByTag(tabspec2.getTag());
        tabHost.setCurrentTabByTag(tabspec1.getTag());

}