0

这是场景:我有一个带有 4 个选项卡的活动,每个选项卡都有不同的意图,每个意图都有不同的活动。完美运行。

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

我要执行的具体操作是:从另一个活动(即在另一个选项卡的内容中)我将其称为父项(the TabActivity)以打开不同的选项卡并向该选项卡的活动添加一些自定义数据。

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

我是否以错误的方式处理这个问题?

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

谢谢 !

4

3 回答 3

1

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

使用应用上下文的方式。

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

MyApplication appContext = (MyApplication) getApplicationContext();

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

 android:name=".MyApplication"

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

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

于 2011-10-10T12:55:00.367 回答
1

就我而言,我在 TabActivity 中存储了对意图的引用

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;
  }

然后,当我想从一个孩子导航到另一个标签时,传递一个 Extra 和 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();
}

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

于 2011-11-09T09:32:18.447 回答
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());

}
于 2011-10-10T12:42:23.413 回答