2011-05-11 143 views
2

我有两个标签报告和图表。在图表标签中,我点击一个按钮后会显示另一个活动“图形”。现在,在“图表”活动中,单击按钮时,我想切换到报表选项卡,不会返回到图表选项卡。以编程方式切换标签android

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

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

这如果tabhost是在TabActivity类的XML创建可能会工作。但我不是在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?

任何帮助,非常感谢。

+0

谢谢你们,你的回应你的活动。但我改变了设计。我有这个'图'活动的原因是因为我不知道可以隐藏标签栏。现在我发现我可以隐藏标签栏,我已经一起删除了“图形”活动。现在我正在图表选项卡本身中完成“图表”活动的所有内容。由于我可以隐藏标签栏,因此我在图表标签中获得了足够的空间来完成此操作。所以现在处于全屏模式的图表选项卡中的点击后退按钮,我可以切换到另一个选项卡并替换标签栏。 – sherry 2011-05-11 22:15:38

回答

1

嗯,有很多解决方案。

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

变2) 你可以从中要更改标签的活动发送一个广播,到活动的主机的选项卡,在广播接收器,你有访问tabhost。

+1

变体1将导致内存泄漏,因为视图和活动上下文在活动被破坏后仍然可用。 – 2011-05-11 22:01:49

+0

是的,你是对的。这就是为什么我标记它“不太好”。我删除它之前,有人使用这个不好的代码...: -/ – 3dmg 2011-05-11 22:08:17

+0

变种2看起来可能是这个问题的潜在解决方案。 – sherry 2011-05-11 22:16:43

1

您无法将一个活动的用户界面从另一个更改(当然,它可能是可能是,但不要尝试它)。

最好的选择是在开始图形活动时使用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); 
     } 
    } 
} 
+0

我并没有试图改变用户界面。我只想切换到不同的选项卡,而不是调用活动的父级选项卡。你的建议似乎很有前途,实施也很简单,谢谢。 – sherry 2011-05-11 22:20:10

+0

嗯,在这种情况下,您可能可以将引用(对于父活动)传递给选项卡中的子活动,然后当您在子活动中单击该按钮时调用父活动中的某个方法。 – 2011-05-11 22:22:13

相关问题