作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我有一个 TabHost,其中包含两个子 Activity (在两个选项卡中)。我还在其中一个我想从我的 parent (TabHost)调用的 Activity 中实现了一个公共(public)函数,以触发选项卡中的一些操作。
是否可以从 TabHost 引用 Activity 本身来调用公共(public)函数?
谢谢
这是我的标签主机设置:
res = getResources();
tabHost = getTabHost();
TabHost.TabSpec spec;
Intent intent;
intent = new Intent().setClass(this, home.class);
spec = tabHost.newTabSpec("home").setIndicator("Groups", res.getDrawable(R.drawable.groups)).setContent(intent);
tabHost.addTab(spec);
intent = new Intent().setClass(this, messages.class);
spec = tabHost.newTabSpec("messages").setIndicator("Messages", res.getDrawable(R.drawable.messages)).setContent(intent);
tabHost.addTab(spec);
最佳答案
我的方法是在扩展 BroadcastReceiver 的子 Activity 中定义一个嵌套的“监听器”类。
然后我会简单地从我的 TabActivity 广播一个 Intent,然后触发 BroadcastReceiver 执行操作。
编辑:给出示例代码...
步骤是……
在 AndroidManifest.xml 中
<activity
android:name=".MyActivity"
android:label="@string/app_name"
<intent-filter>
<action android:name="com.mycompany.myApp.DO_SOMETHING" />
</intent-filter>
</activity>
在 MyActivity.java 中
public class MyActivity extends Activity {
private MyListener listener = null;
private Boolean MyListenerIsRegistered = false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreated(savedInstanceState);
listener = new MyListener();
}
@Override
protected void onResume() {
super.onResume();
if (!MyListenerIsRegistered) {
registerReceiver(listener, new IntentFilter("com.mycompany.myApp.DO_SOMETHING"));
MyListenerIsRegisterd = true;
}
}
@Override
protected void onPause() {
super.onPause();
if (MyListenerIsRegistered) {
unregisterReceiver(listener);
MyListenerIsRegistered = false;
}
}
// Nested 'listener'
protected class MyListener extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// No need to check for the action unless the listener will
// will handle more than one - let's do it anyway
if (intent.getAction().equals("com.mycompany.myApp.DO_SOMETHING")) {
// Do something
}
}
}
}
在主 TabActivity 中
private void MakeChildDoSomething() {
Intent i = new Intent();
i.setAction("com.mycompany.myApp.DO_SOMETHING");
sendBroadcast(i);
}
关于android - 如何从 TabHost 引用子 Activity 来调用公共(public)函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5399324/
我是一名优秀的程序员,十分优秀!