根据Android 开发者页面,片段通过其宿主活动进行通信。这往往会产生严格的片段 <-> 主机关系和即使是最简单的事件传播的详细实现 - 如果您有多个接收者等,情况会变得更糟。
我想提出一种对我有用的替代方法。如果您发现它有问题,请告诉我,特别是关于内存泄漏,因为我有演员在单例中注册。
总之,我有一个 EventHub 单例,其中片段将他们的事件发布到,而不关心是否有人在“另一边”收听。我的片段(或活动)正在通过其 Handler 实例向 EventHub 注册:
Activity/Fragment 监听来自其他 Fragment 的事件:
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 );
}
});