1、首先定义一个接口
public interface
INotifyListener {
public void
notifyContext(Object obj);
}
2、定义一个manager
public class NotifyListenerMangager
{
public static NotifyListenerMangager
manager;
private List listeners = new
ArrayList();
private Map maps
=newHashMap();
//单例模式
public static NotifyListenerMangager
getInstance(){
if(manager == null){
manager = new NotifyListenerMangager();
}
return manager;
}
//注册监听
public void
registerListener(INotifyListener lister,String tag){
if(listeners.contains(lister)) return;
listeners.add(lister);
maps.put(tag,lister);
}
//去除监听
public void
unRegisterListener(INotifyListener
lister){
if(listeners.contains(lister)){
listeners.remove(lister);
}
if(maps.get(lister) != null){
maps.remove(lister);
}
}
//向所有注册页面发通知
public void nofityAllContext(Object
obj){
for (INotifyListener lister : listeners)
{
lister.notifyContext(obj);
}
}
//向某一页面发通知
public void nofityContext(Object obj,String
tag){
INotifyListener lister =
maps.get(tag);
if(lister !=
null){
lister.notifyContext(obj);
}
}
//去除所有监听,建议系统退出时
public void
removeAllListener(){
listeners.clear();maps.clear();
}
}
3、在需要增加监听的页面
实现INotifyListener接口
注册监听
@Override
protected void
onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list);
initData();
initViews();
NotifyListenerMangager.getInstance().registerListener(this,TAG);//TAG为Activity名
}
取消监听
@Override
protected void
onDestroy() {
super.onDestroy();
NotifyListenerMangager.getInstance().unRegisterListener(this);
}
此页面实现了方法用于接收消息
@Override
public void
notifyContext(Object obj) {
Log.i(TAG,obj.toString());
//回调
}
4、使用(发消息)
//通知全部页面
NotifyListenerMangager.getInstance().nofityAllContext("请刷新");
//通知某一个注册的页面
NotifyListenerMangager.getInstance().nofityContext("请刷新",ListActivity.TAG);