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

时间:2011-03-16 00:24:11

标签: android android-tabhost

我有一个包含三个标签的tabhost。每个都是一项活动。我想在操作栏中有一个按钮,顶部的栏有公共按钮,标签的调用功能是活动的。

例如,添加功能可以根据单击按钮时显示的选项卡为每个选项卡添加不同的内容。

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

如果这不起作用,也许我可以从tabhost更新数据库,然后刷新选项卡内容。那会更容易吗?

谢谢大家的时间和支持。

4 个答案:

答案 0 :(得分:14)

我在 TabActivity 类中使用了以下代码来切换标签,然后调用标签活动中定义的公共方法:

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

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

答案 1 :(得分: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)活动数量

希望有所帮助

答案 2 :(得分:0)

根据Peter O的要求编辑:

我在API 10上,这个问题给我带来了巨大的麻烦。我有3个标签,我希望他们所有人都知道另一个变化。我遇到的问题是,一旦选项卡的活动开始,似乎没有回调,所以活动理解用户切换到不同的选项卡,因此需要做的工作以确保其状态是正确的。

我找到了很多这个问题的答案,但似乎都没有。

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

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

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

答案 3 :(得分:0)

上述调用方法的方法无效,

以上是上述问题的快速解答:

getTabHost().setCurrentTab(0);

Activity myActivity=getCurrentActivity();

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

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