我问我们是否可以在另一个类的tabhost上调用setCurrentTab而不是包含tabhost和tabspecs的类?
我们可以放
tabHost.setCurrentTab(1);
在另一个班级而不是这个班级:
public class Main extends TabActivity{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.v("", "Welcome in Main");
setContentView(R.layout.tab);
TabHost tabHost = (TabHost)findViewById(android.R.id.tabhost); // Le TabHost a des Tabs
TabSpec firstTabSpec = tabHost.newTabSpec("tid1"); // TabSpec: new tab - TabSpec : setContent to the tab
firstTabSpec.setIndicator("Informations", getResources().getDrawable(R.drawable.database)).setContent(new Intent(this,FirstTab.class));
tabHost.addTab(firstTabSpec);
TabSpec secondTabSpec = tabHost.newTabSpec("tid1");
secondTabSpec.setIndicator("Graphiques", getResources().getDrawable(R.drawable.chart)).setContent(new Intent(this,SecondTab.class));
tabHost.addTab(secondTabSpec);
TabSpec thirdTabSpec = tabHost.newTabSpec("tid1"); // tid1 is firstTabSpec Id (used to access outside)
thirdTabSpec.setIndicator("Réglages", getResources().getDrawable(R.drawable.settings)).setContent(new Intent(this,ThirdTab.class));
tabHost.addTab(thirdTabSpec);
}
}
我们可以将它变成静态变量吗?我们怎样才能做到这一点?
感谢您的关注!
答案 0 :(得分:6)
你确定可以。对于您的情况,TabActivity的单例可能效果最佳。例如:
public class Main extends TabActivity{
private staic Main theInstance;
public static getInstance() {
return Main.theInstance;
}
public Main() {
Main.theInstance = this;
}
// The rest of your code here.
}
然后,从另一个班级,你可以打电话:
Main.getInstance()getTabHost()setCurrentTab(1);
注意:我提供的并不是一个完整的单例实现,但它应该足以满足您的需求。根据您正在设置标签的类,您可能需要在调用Main.getInstance()
方法之前检查setCurrentTab()
是否为空。
答案 1 :(得分:3)
但是,如果您正在进行另一项活动,那么无论如何您都不会看到标签?
我有一个类似的问题,ListView启动tabHost活动onItemClick以使其正常工作,我通过intent传递了我想要显示的tabNumber,然后使用setCurrentTab将当前选项卡设置为传递的选项卡号。不确定这是否适合你。
编辑:我是这样做的:
Intent i = new Intent(this, TabHostActivity.class);
i.putExtra("TabNumber", tabNumberToBeSelected); //tabNumberToBeSelected is an int
startActivity(i);
然后在tabHost活动中:
int tabNumber = getIntent().getIntExtra("TabNumber", 0);
//tabHost code goes here
tabHost.setCurrentTab(tabNumber);
答案 2 :(得分:3)
在您的活动FirstTab,SecondTab和ThirdTab中,您应该使用如下方法:
boolean setCurrentTab(int i) {
if (getParent() instanceof Main) {
((Main) getParent()).getTabHost().setCurrentTab(i);
return true;
}
return false;
}