Android 開発者ページによると、フラグメントはそのホスト アクティビティを通じて通信します。これは、厳格なフラグメント <-> ホスト関係と、最も単純なイベント伝播の冗長な実装を生成する傾向があります。複数の受信者がいる場合などはさらに悪化します。
私にとってうまくいった別のアプローチを提案したいと思います。アクターがシングルトンに登録しているため、特にメモリ リークに関して問題がある場合はお知らせください。
要約すると、フラグメントがイベントを投稿する EventHub シングルトンがあり、「反対側」で聞いている人がいるかどうかは気にしません。私のフラグメント (またはアクティビティ) は、その Handler インスタンスを渡す EventHub に登録されています。
他のフラグメントからのイベントをリッスンするアクティビティ/フラグメント:
public void onResume()
{
super.onResume();
// Register self with the hub and start receiving events
EventHub.getInstance().register( handler_ );
...
}
/** Don't leak handlers. */
@Override
public void onPause() {
// Remove self from the event hub.
EventHub.getInstance().unregister( handler_ );
}
/** Dispatch events. */
private Handler handler_ = new Handler() {
@Override
public void handleMessage(Message msg) {
switch( msg.what ) {
....
}
}
};
フラグメント放出イベント:
button.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v) {
EventHub.getInstance().post( Message m );
}
});