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条)

报告相同问题?

悬赏问题

  • ¥20 matlab yalmip kkt 双层优化问题
  • ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体
  • ¥88 实在没有想法,需要个思路
  • ¥15 MATLAB报错输入参数太多
  • ¥15 python中合并修改日期相同的CSV文件并按照修改日期的名字命名文件
  • ¥15 有赏,i卡绘世画不出
  • ¥15 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入
  • ¥40 使用MATLAB解答线性代数问题
  • ¥15 COCOS的问题COCOS的问题