gpt4 book ai didi

android - 如何从 TabHost 引用子 Activity 来调用公共(public)函数?

转载 作者:IT老高 更新时间:2023-10-28 23:17:50 25 4
gpt4 key购买 nike

我有一个 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 执行操作。

编辑:给出示例代码...

步骤是……

  1. 在 list 中定义 Intent 过滤器
  2. 将嵌套的“监听器”添加到子 Activity 中
  3. 在子activity中设置onResume()/onPause()来注册/注销监听器
  4. 在 TabActivity 中创建 Intent 并在您希望 child 做某事时广播它

在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com