广播接收器的坑
来源:互联网 发布:苏州美工的行情 编辑:程序博客网 时间:2024/06/01 08:03
BroadCastReceiver has no zero argument constructor
清单AndroidManifest注册 BroadCastReceiver 内部类 的时候,一定要是静态的(static)内部类,一定是有无参数的构造器,因为发送静态广播的时候是同过无参的构造器构建的。
简便的写法是将内部类变为外部类。
现在有需求:
1. 第一层界面有三个fragment,点击一个fragment进去第二层Activity后,在进去后可以进入第三层的界面,在第三层进行具体操作,操作成功后回到第一个界面的时候刷新三个fragment的数据,没有操作就不用刷新界面。如下图。
这里可以使用BroadCastReceiver来实现。下面是实现步骤:
1.编写RefreshBroadCastReceiver,代码如下:
public class RefreshBroadCastReceiver extends BroadcastReceiver { public static final String ACTION = "BaseMaintenanceFragment.RefreshBroadCastReceiver.ACTION"; //存储需要刷新的界面 public static List<Refresh> refreshList = new ArrayList<>(); public RefreshBroadCastReceiver() { } public RefreshBroadCastReceiver(Refresh refresh) { if (!refreshList.contains(refresh)) { refreshList.add(refresh); } } @Override public void onReceive(Context context, Intent intent) {// Log.i("123", "!@################################"); //接收刷新的广播进行刷新界面的操作 String action = intent.getAction(); switch (action) { case ACTION: if (refreshList != null && refreshList.size() != 0) { for (int i = 0; i < refreshList.size(); i++) { refreshList.get(i).onReceive(context, intent); } } break; } //收到数据后的刷新接口 public interface Refresh { void onReceive(Context context, Intent intent); }
2.清单文件中注册:
<receiver android:name="com.zhang.RefreshBroadCastReceiver" android:exported="false"> <intent-filter> <action android:name="com.zhang.RefreshBroadCastReceiver.ACTION" /> </intent-filter> </receiver>
3.在fragment中注册广播
实现
implements RefreshBroadCastReceiver.Refresh @Override public void onReceive(Context context, Intent intent) { getData(); } protected RefreshBroadCastReceiver mRefreshBroadCastReceiver; private void registerBroadCastReceiver() { mRefreshBroadCastReceiver = new RefreshBroadCastReceiver(this); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(ACTION); getContext().registerReceiver(mRefreshBroadCastReceiver, intentFilter); } @Override public void onStop() { super.onStop(); getContext().unregisterReceiver(mRefreshBroadCastReceiver); }
4.发送广播:
Intent intent = new Intent(); intent.setAction(RefreshBroadCastReceiver.ACTION); sendBroadcast(intent);
0 0
- 广播接收器的坑
- 广播接收器的使用
- 广播接收器的使用
- 操作需求的广播接收器
- 探索广播接收器的使用
- 广播接收器的使用(1)
- 广播接收器的常用方法
- 广播接收器
- 广播接收器
- 广播接收器(BroadcastReceiver)的分析
- Broadcast Receiver(三)广播接收器的优先级
- android广播接收器的优先级总结
- 关于广播接收器BroadcastReceiver的简单总结
- MediaButtonReceiver---独特的媒体广播接收器
- 广播接收器的生命周期及使用
- 常用的监听系统广播接收器
- 广播接收器(BroadcastReceiver)的使用
- android广播接收器 接收广播的Intent Action 事件类型
- 适配器模式
- Glide 入门到精通之六——缓存基础
- MPI—统计素数个数
- CDN浅谈
- 汇编-寄存器
- 广播接收器的坑
- Android动画之ScaleAnimation
- 直播推流端弱网优化策略 | 直播 SDK 性能优化实践
- webrtc研究-视频接收端处理
- Visual Studio 2013 KEY(密钥)
- ActorSystem讲解
- 汇编-学习笔记
- oracle如何实现全角和半角的切换
- 查看Android应用包名、Activity的几个方法