多个Fragment在同一个Activity中时,在信息交互时,由于Fragment是独立的,且不产生新的Activity可以使用startActivityForResult获取返回参数,同时也无法使用setArgment等函数多次向其他Fragment设置参数,这种情况下只能使用BroadcastReceiver来及时通知其他的子Fragment以及更新子Fragment。
由于broadcastReciver是对整个系统内的应用程序进行广播通知的,为了安全起见可使用LocalBroadCastReceiver来进行应用程序内的广播发送与接收。
下面是一个同在一个Activity中的两个Fragment,TitleFragment是一个列表Fragment,点击不同的列表时,可更新右边DetailFragment中的内容。他们之间的通信使用的时LocalBraodCastReceiver来进行的。
LocalBraodCastReceiver使用方式:
1 初始化广播器并添加过滤关键词
private MainCallBackLocalBroadCastReceiver mainCallBackLocalBroadCastReceiver;
private LocalBroadcastManager lBM;
/**
* 初始化广播器
*/
private void InitMainLocalBroadcastReceiver() {
lBM = LocalBroadcastManager.getInstance(MainActivity.this);
mainCallBackLocalBroadCastReceiver = new MainCallBackLocalBroadCastReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("TitleFragment"); //添加过滤关键词
intentFilter.addAction("DetailFragment");//添加过滤关键词
lBM.registerReceiver(mainCallBackLocalBroadCastReceiver, intentFilter);
}
2 自定义广播接收函数:
/**
* 广播接收处理函数
* @author admin
*
*/
private class MainCallBackLocalBroadCastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals("TitleFragment")) {
//得到Title中传来的数据
System.out.println("TitleFragment");
String str = (String)intent.getExtras().get("arraylist");
System.out.println(str);