事件分发器

来源:互联网 发布:ios完整项目源码 编辑:程序博客网 时间:2024/06/10 13:20
/** * 事件分发器 * @author wtw * 2015-12-10下午5:39:18 */public class MyEventListener {private static Map<Integer, ArrayList<WeakReference<IEventListener>>> mEventMap=new HashMap<Integer, ArrayList<WeakReference<IEventListener>>>();//将一个事件  和多个监听器接口进行绑定//添加监听器public static void addListener(int eventType,IEventListener listener){ArrayList<WeakReference<IEventListener>> list=mEventMap.get(eventType);if(list==null)list=new ArrayList<WeakReference<IEventListener>>();//判断某一个监听器是否已经在这个事件里面进行绑定了for (WeakReference<IEventListener> weakReference:list) {IEventListener iEventListener=weakReference.get();if(iEventListener!=null&&iEventListener.equals(listener)){return;}}WeakReference<IEventListener> wrf=new WeakReference<IEventListener>(listener);list.add(wrf);mEventMap.put(eventType, list);}//移除没有用的监听器public static void removeListener(int eventType,IEventListener listener){ArrayList<WeakReference<IEventListener>> list=mEventMap.get(eventType);if(list==null)return;for (int i = 0; i < list.size(); i++) {IEventListener iEventListener=list.get(i).get();if(iEventListener!=null&&iEventListener.equals(listener)){list.remove(i);return;}}}//激活监听器public static void fireEvent(Message msg){ArrayList<WeakReference<IEventListener>> list = mEventMap.get(msg.what);if(list!=null){for (int i = 0; i < list.size(); i++) {IEventListener listener=list.get(i).get();if(listener!=null){listener.onEvent(msg);}}}}//监听器接口public interface IEventListener{void onEvent(Message msg);}}

0 0
原创粉丝点击