tabHost的setCurrentTab

时间:2011-06-21 13:09:28

标签: android static android-tabhost tabactivity

我问我们是否可以在另一个类的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);
}

}

我们可以将它变成静态变量吗?我们怎样才能做到这一点?

感谢您的关注!

3 个答案:

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