需求
如果用户登录了,需要注册了广播的部分页面重新刷新数据,同样注册了相同广播的可以不用刷新页面
代码实现
/**
* @date: 2019/4/28 0028
* @author: gaoxiaoxiong
* @description:广播接收器
**/
public class LocalBroadcastReceiver extends BroadcastReceiver {
private OnClassNameListener onClassNameListener;
public interface OnClassNameListener{
void className(String name,Intent intent);//className
}
public void setOnClassNameListener(OnClassNameListener onClassNameListener) {
this.onClassNameListener = onClassNameListener;
}
public static String BROADCASTNAME="className";
@Override
public void onReceive(Context context, Intent intent) {
if (onClassNameListener!=null){
String className = intent.getStringExtra(BROADCASTNAME);
if(className !=null)
onClassNameListener.className(className,intent);
}
//当然了,用户可以根据设置的actionName来操作
if (intent.getAction().equals(SPMobileConstants.RELOADACTION)){
}
}
}
用户可以通过这个className决定是否刷新数据
发送广播
public static String RELOADACTION="com.xxxxx.reloadAction";//重新加载
Intent messageIntent = new Intent(RELOADACTION);
messageIntent.putExtra(BROADCASTNAME,"MainTwoFragment");
LocalBroadcastManager.getInstance(mActivity).sendBroadcast(messageIntent);
广播监听
LocalBroadcastReceiver localBroadcastReceiver;
//注册广播监听,用户可以根据判断传递的name是不是自己需要的对应的名字就决定是否去刷新页面
if (localBroadcastReceiver == null){
localBroadcastReceiver = new LocalBroadcastReceiver();
localBroadcastReceiver.setOnClassNameListener(new LocalBroadcastReceiver.OnClassNameListener() {
@Override
public void className(String name, Intent intent) {
if (!StringUtils.isEmpty(name) && name.equals("MainTwoFragment")){
//做一些MainTwoFragment的操作
}
}
});
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(RELOADACTION);
LocalBroadcastManager.getInstance(this.getActivity()).registerReceiver(localBroadcastReceiver,intentFilter);
}
//一定要记得销毁,解绑
@Override
public void onDestroyView() {
super.onDestroyView();
if (localBroadcastReceiver!=null){
LocalBroadcastManager.getInstance(this.getActivity()).unregisterReceiver(localBroadcastReceiver);
localBroadcastReceiver = null;
}
}
网友评论