LiDaming_and 2012-12-07 07:58 采纳率: 100%
浏览 4473
已结题

如何从TabHost中引用一个子activity来调用一个公共函数?

在TabHost中有两个子activity,这两个子activity在两个tab中。在其中的一个activity实现了一个公共函数,我想从父类TabHost中调用这个函数,来触发tab中的一些action。
能否从TabHost中引用activity本身来调用一个公共函数?
tabhost设置:

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);
  • 写回答

2条回答

  • Curie-87 2012-12-07 09:43
    关注

    是之前遇见过这个问题是这样解决的:
    1.在manifest文件中设置intent filter
    2.给子activity添加嵌套的'listener'
    3.在子activity的onResume()/onPause()到register/unregister监听器
    4.在TabActivity创建intent,然后广播。
    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
                }
            }
        }
    }
    

    main TabActivity

    private void MakeChildDoSomething() {
    
        Intent i = new Intent();
        i.setAction("com.mycompany.myApp.DO_SOMETHING");
        sendBroadcast(i);
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 fesafe材料库问题
  • ¥35 beats蓝牙耳机怎么查看日志
  • ¥15 Fluent齿轮搅油
  • ¥15 八爪鱼爬数据为什么自己停了
  • ¥15 交替优化波束形成和ris反射角使保密速率最大化
  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统