以下是该方案: 我有一个包含4个选项卡的活动,每个选项卡具有不同的意图,每个选项具有不同的活动。 效果很好。
我需要的是,以某种方式改变其中一个标签的意图。
它就像在TabSpec.setContent(intent)
上使用的Intent中添加额外的参数一样简单,但我还没有找到一种方法来检索改变它的意图。
我要做的具体操作是:从另一个活动(在另一个标签的内容中)我称之为父(TabActivity
)以打开另一个标签并添加一些自定义数据到该标签的活动。
我可以毫无问题地更改选项卡,但是我没有找到将额外参数从一个活动传递到另一个活动的方法,因为用于创建TabSpec
的原始意图没有额外的参数。
我是以错误的方式接近这个吗?
有没有办法替换TabSpec
内容的意图?
谢谢!
答案 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());
}