Android:如何从tabhost中调用Tab中的Activity的函数

我有一个带有三个选项卡的tabhost。 每个都是一个活动。 我想有一个button,在操作栏中,顶部的栏上有通用button,调用活动标签的function。

例如,一个添加function,可以添加不同的标签,取决于你点击button时出现的标签。

所以,我正在讨论如何从tabHost调用Activity A中的一个函数。

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

感谢大家的时间和支持。

Solutions Collecting From Web of "Android:如何从tabhost中调用Tab中的Activity的函数"

嗨刚刚偶然发现了这一点,不知道你是否已经find了解决办法?

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

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

可能有这样的事情:

  • parentActivity – 我的“容器”活动持有parentActivity
  • 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"); } 

注意:我相信另一个select是重新devise使用视图,而不是您的选项卡中的活动。 这是一个更好的整体select,因为IIRC内存明智,你只在栈上存储1个活动,而不是( n * tabs )活动数量

希望有所帮助

我在我的TabActivity类中使用下面的代码切换选项卡,然后调用在选项卡的活动中定义的公共方法:

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

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

按照Peter O的要求编辑:

我在API 10上,这个问题让我非常头疼。 我有3个选项卡,我希望他们都知道对方的变化。 我遇到的问题是,一旦标签的活动开始,似乎没有回叫,所以活动理解用户切换到不同的标签,因此需要做的工作,以确保其状态是正确的。

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

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

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

所以我摆脱了这一点,现在我可以调用this.getCurrentActivity(),然后调用由该调用返回的Actvitity类中的方法 – 这让活动知道它必须更新它的状态 – 在我的情况下,它这样做使用应用程序对象。

上述调用方法的方式将不起作用,

以下是上述问题的快速回答:

getTabHost().setCurrentTab(0);

Activity myActivity=getCurrentActivity();

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

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