2011-03-16 110 views
7

我有一个带有三个选项卡的tabhost。每个都是一项活动。我想有一个按钮,它位于操作栏中,顶部带有常用按钮的栏,用于激活标签的调用功能。Android:如何调用Tabhost中的Activity选项卡的功能

例如,一个添加功能可以为每个标签添加不同的内容,具体取决于您单击该按钮时显示的标签。

因此,我正在aksing如何从tabHost调用Activity A中的函数。

如果不行,我可以从tabhost更新数据库,然后刷新标签内容。那会更容易吗?

谢谢大家的时间和支持。

回答

7

嗨刚刚偶然发现这一点,不知道你是否已经找到了解决方案?

我最近自己解决了这个问题。我以前通过从tabhost活动提取意向广播并在子选项卡活动内接收广播来解决问题。这对我有用,但我确定有一个“更好”的方式。

一个更清洁的方式是像这样的东西来实现它:

可能是这样的:

  • parentActivity - 我的 “容器” 活性,其持有TabHost
  • childActivity - 我标签活动 其中包含标签内容和 我想调用的公共方法 parentActivity

内parentActivity:

// a method used for onclick callback or whatever you need. within parentActivity (tabhost) 
// this will get call huzzah() in the first tab - getChildAt(0) 
onClick() { 
    childActivity childAct = (childActivity) getTabHost().getChildAt(0).getContext(); 
    childAct.huzzah(); 
} 

内childActivity:

// a public method for the parent activity to access 
public void huzzah() { 
    Log.d("stuff", "huzzah() called"); 
} 

注:另一种选择,我相信是重新设计使用的意见,而不是活动,你的标签。这是一个更好的整体选择,因为IIRC内存明智的你只在堆栈上存储1个活动,而不是(n * tabs)的活动数量

希望帮助

+1

嗨wired00,我试图实现这个解决方案,但得到一个ClassCastException。我基本上复制了你的代码,但这里是我的副本,以防万一: \t \t \t SearchActivity childAct =(SearchActivity)getTabHost()。getChildAt(0).getContext(); \t \t \t childAct.changeStateTo(1);在这段代码中,SearchActivity是类的名称,而changeStateTo()是被调用的公共方法。有任何帮助? – Rockmaninoff 2011-06-14 23:07:52

+1

onClick是错误的代码。返回没有儿童活动,但tabhost的子视图 - LinearLayout – 2012-01-19 22:29:59

+0

嗨@Rockmaninoff,我面临同样的问题。你得到任何解决方案? – 2014-03-19 12:18:30

13

我用我的TabActivity类中下面的代码开关选项卡,然后调用标签的活动定义的公共方法:

getTabHost().setCurrentTab(0); 
Activity MyActivity = this.getCurrentActivity(); 
MyActivity.myMethod(); 

的人寻找这个问题的答案我希望有所帮助。

+0

谢谢,我试试下次... – trgraglia 2011-06-24 15:01:39

+1

这工作就像一个魅力:)另一个给了我,classCastException ... – codemonkeybr 2011-08-11 22:41:59

+0

@dan k:嗨我创建3个活动的意图(我添加到TabHost)在我的主TabActivity。我也有刷新tabhost布局,点击这个刷新按钮我想刷新意图活动/ currrent选项卡活动列表,通常公共方法称为像你说的,但在其他情况下,它显示conext问题...任何想法结束这个? – CoDe 2012-07-09 01:53:55

0

市价修改彼得O请求:

我在API 10,而这个问题给了我一个巨大的头痛。我有3个选项卡,我希望他们所有人都知道另一方面的变化。我遇到的问题是,一旦选项卡的活动启动,似乎没有回叫,因此活动理解用户切换到不同的选项卡,因此需要进行工作以确保其状态正确。

我发现很多这个问题的答案,但似乎没有工作。

我终于开始工作的那个解决方案就是为这个线程提供的#3,但它也令人困惑。我发现getTabHost()。setCurrentTab(0);什么也没做;我实现了OnTabChangeListener()来调用一个使用getTabHost()的函数。setCurrentTab(0);但是,我发现getTabHost()。setCurrentTab(0);导致应用程序崩溃为0以外的任何选项卡 - 例如,如果我选择了选项卡B(index = 1),然后调用getTabHost()。setCurrentTab(1);该应用程序崩溃。

使用调试器,我发现调用this.getCurrentActivity();总是返回与用户点击的标签关联的活动 - 调用getTabHost()。setCurrentTab();没有改变这个事实,并导致应用程序崩溃。

所以我摆脱了它,我现在可以调用this.getCurrentActivity(),然后调用该调用返回的Actvitity类中的方法 - 这让活动知道它必须更新它的状态 - 在我的它使用应用程序对象执行此操作。

+1

这个答案有点混乱。你能格式化它并编辑它,因此它可以作为一个更好的答案吗?例如,什么是“上面的代码?” (答案可以按不同的顺序排序,因此提及“上方”的答案可能不正确。) – 2012-03-14 21:08:22

+0

我同意彼得的观点。欢迎来到SO Derwood,感谢您的回应,但学习格式将帮助您获得更多认可并获得更好的反馈。至于0以外的选项卡上的错误...听起来像别的东西正在导致错误。 – trgraglia 2012-03-19 09:31:54

0

调用该方法将无法正常工作的上述方式,

这里是上述问题的快速回答:

getTabHost().setCurrentTab(0);

Activity myActivity=getCurrentActivity();

String name=((Tab1) myActivity).et1.getText().toString();

这里上面的代码在onclick()的活动方法中给出TahHost 其中Tab1是第二个活动,et1是Tab1活动中edittext的标识,因此您可以单独获取不同字段的所有值。

相关问题