在做项目时经常遇到一个页面上个列表,然后会对列表数据进行添加,删除,编辑等操作,
之前图方便就在onResume方法中增加一个刷新数据方法,但是体验很差,没有刷新数据也会调用刷新,也会增加流量开销
为了做到只有在改变数据的时候才刷新。有以下两种常用方法
1,使用startactivityforResult方法。通过回掉刷新,但是通常不能满足全部情况。
2,使用BroadcastReceiver。这里主要讲述此方法。
在需要刷新的界面activity中增加广播接收器oncreate中registerReceiver,在ondesdroy中unregisterReceiver
private MyBroadCast mMyBroadCast ;
public static final String ACTION_XXXX= "action_xxx_xxx";
public void registerMyReceiver() {
mMyBroadCast = new MyBroadCast ();
IntentFilter filter = new IntentFilter();
filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
filter.addAction(ACTION_XXXX);
registerReceiver(mMyBroadCast , filter);
}
public class MyBroadCast extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (ACTION_XXXX.equals(intent.getAction())) {
boolean isDelete= intent.getBooleanExtra(
"intent_delete", false);
boolean isAdd = intent.getBooleanExtra(
"intent_add", false);
boolean isUpdate = intent.getBooleanExtra(
"intent_update", false);
//根据类型进行相关数据处理
}
}
}
在添加数据成功时发送广播
Intent intent = new Intent(ACTION_XXXX);
intent.putExtra("intent_add",true);
sendBroadcast(intent);
在编辑成功时发送广播
Intent intent = new Intent(ACTION_XXXX);
intent.putExtra("intent_update",true);
sendBroadcast(intent);
在删除成功时发送广播
Intent intent = new Intent(ACTION_XXXX);
intent.putExtra("intent_delete",true);
sendBroadcast(intent);
这里是通过intent传不同的数据区分,也可以通过不同的action来区分不同的功能
private MyBroadCast mMyBroadCast ;
public static final String ACTION_XXXX1= "action_xxx_xxx1";
public static final String ACTION_XXXX2= "action_xxx_xxx2";
public static final String ACTION_XXXX3= "action_xxx_xxx3";
public void registerMyReceiver() {
mMyBroadCast = new MyBroadCast ();
IntentFilter filter = new IntentFilter();
filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
filter.addAction(ACTION_XXXX1);
filter.addAction(ACTION_XXXX2);
filter.addAction(ACTION_XXXX3);
registerReceiver(mMyBroadCast , filter);
}
public class MyBroadCast extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (ACTION_XXXX1.equals(intent.getAction())) {
} else if (ACTION_XXXX2.equals(intent.getAction())) {
}else if (ACTION_XXXX3.equals(intent.getAction())) {
}
}
}
在添加数据成功时发送广播
Intent intent = new Intent(ACTION_XXXX1);
sendBroadcast(intent);
在编辑成功时发送广播
Intent intent = new Intent(ACTION_XXXX2);
sendBroadcast(intent);
在删除成功时发送广播
Intent intent = new Intent(ACTION_XXXX3);
sendBroadcast(intent);