Мой подход заключается в определении вложенного класса «слушателя» в дочернем действии, который расширяет BroadcastReceiver.
Затем я просто передаю Намерение из моего TabActivity, которое затем запускает BroadcastReceiver для выполнения действия.
РЕДАКТИРОВАТЬ: Чтобы привести пример кода ...
Шаги ...
- Определение фильтра намерений в манифесте
- Добавление вложенного «слушателя» в дочернее действие
- Установить onResume () / onPause () в дочерней активности для регистрации / отмены регистрации слушателя
- Создайте намерение в TabActivity и передайте его, когда вы хотите, чтобы ребенок что-то сделал
В AndroidManifest.xml
<activity
android:name=".MyActivity"
android:label="@string/app_name"
<intent-filter>
<action android:name="com.mycompany.myApp.DO_SOMETHING" />
</intent-filter>
</activity>
In 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
}
}
}
}
В основной вкладке Активность
private void MakeChildDoSomething() {
Intent i = new Intent();
i.setAction("com.mycompany.myApp.DO_SOMETHING");
sendBroadcast(i);
}