0

我在问我们是否可以从另一个类而不是包含 tabhost 和 tabspecs 的类调用 tabhost 上的 setCurrentTab?

我们可以把

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

}

我们可以使它成为一个静态变量吗?我们如何才能做到这一点?

感谢您的关注!

4

3 回答 3

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()方法之前检查它是否为空。

于 2011-06-21T13:18:15.740 回答
3

但是,如果您在另一个活动中,无论如何您都不会看到这些选项卡,对吗?

我在 ListView 上遇到了类似的问题,它启动了 tabHost 活动 onItemClick 以使其正常工作,我通过意图传递了我想显示的 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);    
于 2011-06-21T13:18:38.220 回答
3

在您的活动 FirstTab、SecondTab 和 ThirdTab 中,您应该使用如下方法:

boolean setCurrentTab(int i) {
    if (getParent() instanceof Main) {
        ((Main) getParent()).getTabHost().setCurrentTab(i);
        return true;
    }
    return false;
}
于 2011-06-21T13:56:05.627 回答