版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36347817/article/details/81702863
使用注册广播器的方式,在任意fragment之间刷新数据。
1.在要刷新的fragment中,实现以下方法:
//注册广播接收器
private void registerReceiver() {
broadcastManager = LocalBroadcastManager.getInstance(getActivity());
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("zachary");
broadcastManager.registerReceiver(mRefreshReceiver, intentFilter);
}
private BroadcastReceiver mRefreshReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String refresh= intent.getStringExtra("refreshInfo");
if ("yes".equals(refresh)) {
// 在主线程中刷新UI,用Handler来实现
new Handler().post(new Runnable() {
public void run() {
//在这里来写你需要刷新的地方
}
});
}
}
};
2.在onCreate()中广播注册,在onDetach()中取消注册:
LocalBroadcastManager broadcastManager;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = super.onCreateView(inflater, container, savedInstanceState);
ButterKnife.bind(this, rootView);
//刷新Fragment数据的方法
registerReceiver();
return rootView;
}
//注销广播
@Override
public void onDetach() {
super.onDetach();
broadcastManager.unregisterReceiver(mRefreshReceiver);
}
3.在其他fragment中发送广播来实现刷新另一个或者多个fragment:
//在需要的事件中执行如下代码,发送刷新数据的广播
Intent intent = new Intent("zachary");
intent.putExtra("refreshInfo", "yes");
LocalBroadcastManager.getInstance(getActivity()).sendBroadcast(intent);
4.功能很强大,可以在子fragment中刷新父fragment,反之亦然。