以编程方式切换标签android

时间:2011-05-11 21:37:45

标签: android android-tabhost

我有两个标签报告和图表。在图表选项卡中,我点击了一个按钮即可显示另一个活动“图表”。现在,在“图形”活动中,单击按钮,我想切换到报告选项卡,而不是回到图表选项卡。

所以在活动“图表”中,我认为我应该这样做,

final TabHost tabHost =  (TabHost) getParent().findViewById(android.R.id.tabHost);
    btnBackToReports.setOnClickListener(new OnClickListener() {  
        public void onClick(View v) {
            tabHost.setCurrentTab(1);
        }
    });

如果在TabActivity类的xml中创建tabhost,这可能会起作用。但我不是在xml中创建tabhost。所以,我做不到findViewById(android.R.id.tabhost)。我正在这样的java文件中创建它,

TabHost tabHost = getTabHost();
TabHost.TabSpec chartsSpec = tabHost.newTabSpec("charts").setIndicator("Charts")
                                    .setContent(new Intent(this, Charts.class));
                                    tabHost.addTab(chartsSpec);

那么我现在如何获得tabHost的id?是否可以通过编程方式将ID设置为tabHost?

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

嗯,有很多解决方案。

变体1)(删除,是愚蠢的)

变体2) 您可以从想要更改选项卡的活动发送广播,到托管选项卡的活动以及您可以访问tabhost的广播接收器中发送广播。

答案 1 :(得分:1)

您无法将一个活动的UI更改为另一个活动(好吧,它可能可能,但不要尝试)。

最佳选择是在启动图表活动时使用startActivityForResult。 然后,当有人点击您的按钮时,您可以执行

public void onClick(View v) {
    Intent intent = new Intent();
    intent.putExtra("selected_tab", 1);
    setResult(Activity.RESULT_OK);
    finish();
}

并在您的活动中使用标签

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == Activity.RESULT_OK && data != null) {
        int selectedTab = intent.getIntExtra("selected_tab", 0);
        if (selectedTab == 1) {
            tabHost.setCurrentTab(1);
        }
    }
}