首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android TabHost 中如何跨 Tab 呼叫子 Activity 的公共方法

     編輯:程式設計綜合問答

在 TabHost 架構下,父 Activity 無法直接持有子 Activity 實例來呼叫其公共方法。推薦使用廣播機制實現跨組件通訊。

實作步驟

1. 在 AndroidManifest.xml 為子 Activity 註冊 Intent Filter

<activity android:name=".MyActivity" android:label="@string/app_name">
    <intent-filter>
        <action android:name="com.mycompany.myApp.DO_SOMETHING" />
    </intent-filter>
</activity>

2. 子 Activity 實作 BroadcastReceiver

public class MyActivity extends Activity {
    private MyListener listener;
    private boolean listenerRegistered = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        listener = new MyListener();
    }

    @Override
    protected void onResume() {
        super.onResume();
        if (!listenerRegistered) {
            registerReceiver(listener, new IntentFilter("com.mycompany.myApp.DO_SOMETHING"));
            listenerRegistered = true;
        }
    }

    @Override
    protected void onPause() {
        super.onPause();
        if (listenerRegistered) {
            unregisterReceiver(listener);
            listenerRegistered = false;
        }
    }

    private class MyListener extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            if ("com.mycompany.myApp.DO_SOMETHING".equals(intent.getAction())) {
                // 執行公共函數邏輯
            }
        }
    }
}

3. 父 TabActivity 發送廣播

private void makeChildDoSomething() {
    Intent i = new Intent();
    i.setAction("com.mycompany.myApp.DO_SOMETHING");
    sendBroadcast(i);
}

優點

  • 解耦父子組件,符合 Android 元件通訊設計模式。
  • 支援多個子 Activity 同時接收廣播。
  • 生命週期自動管理註冊/解除註冊,避免洩漏。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved