Java 事件机制(模仿Flex事件机制)
2013-11-14 16:45
316 查看
1、事件源
2、事件对象
3、事件监听器
事件监听器
事件字符串
事件对象
事件源
2、事件对象
3、事件监听器
事件监听器
public interface EventBusListener extends EventListener { public void onReceive(String eventid, Object parameters); }
事件字符串
public class EventCode { public static final String INNER_SWITCH_TO_MAP_PAGE = "esri.arigis.viewer.android.eventcode.swith_to_map"; public static final String INNER_SWITCH_TO_DATA_PAGE = "esri.arigis.viewer.android.eventcode.swith_to_panelpage"; public static final String INNER_SWITCH_TO_PANEL_PAGE_FLOAT = "esri.arigis.viewer.android.eventcode.swith_to_panelpage_float"; public static final String INNER_TOOLBAR_OPEN = "esri.arigis.viewer.android.eventcode.toolbar_open"; public static final String INNER_TOOLBAR_CLOSE = "esri.arigis.viewer.android.eventcode.toolbar_close"; public static final String INNER_WIDGET_CLOSE = "esri.arigis.viewer.android.eventcode.widget_close"; public static final String INNER_MESSAGEBOX = "esri.arigis.viewer.android.eventcode.messagebar_open"; public static final String INNER_LEFTINFO= "esri.arigis.viewer.android.eventcode.leftinfo"; public static final String MAP_LOADING_SUCCESS = "esri.arigis.viewer.android.eventcode.map_loading_success"; public static final String MAP_LOADING_FAILURE = "esri.arigis.viewer.android.eventcode.map_loading_failure"; public static final String WIDGET_OPEN = "esri.arigis.viewer.android.eventcode.widget_open"; public static final String WIDGET_CLOSE = "esri.arigis.viewer.android.eventcode.widget_close"; public static final String TOOLBAR_SWITCH = "esri.arigis.viewer.android.eventcode.toolbar_switch"; public static final String ACTIVITY_START = "esri.arigis.viewer.android.eventcode.activity_start"; public static final String ACTIVITY_PAUSE = "esri.arigis.viewer.android.eventcode.activity_pause"; public static final String ACTIVITY_RESUME = "esri.arigis.viewer.android.eventcode.activity_resume"; public static final String ACTIVITY_STOP = "esri.arigis.viewer.android.eventcode.activity_stop"; public static final String ACTIVITY_DESTORY = "esri.arigis.viewer.android.eventcode.activity_destory"; public static final String BASE_LAYER_SWITCH = "esri.arigis.viewer.android.eventcode.baselayer_switch"; }
事件对象
public class EventMessage extends EventObject { private static final long serialVersionUID = 6255664332581555248L; private Object mSource; private String mEventId = ""; private Object mParameters; public EventMessage(Object source, String eventid, Object params) { super(source); this.mSource = source; this.mEventId = eventid; this.mParameters = params; // TODO Auto-generated constructor stub } public Object getSource() { return mSource; } public String getEventId() { return mEventId; } public Object getParameters() { return mParameters; } }
事件源
public class EventBusManager { private static String SEPARATOR = "@"; private static Map<String, EventBusListener> mMapClassEventId = new HashMap<String, EventBusListener>(); public static void addListener(final Object dest, final String eventid, final String method) { String key = getKey(dest,eventid,method); EventBusListener listener = new EventBusListener() { @Override public void onReceive(String eid, Object parameters) { if(eid != null && eventid !=null && eid.equals(eventid)) { Class<?> w = dest.getClass(); try { Log.d("EventBusManager","class="+dest.getClass().getName()+",method="+method); Method action=w.getMethod(method,Object.class); action.invoke(dest,parameters); } catch (Exception e) { e.printStackTrace(); } } } }; mMapClassEventId.put(key, listener); } private static String getKey(final Object dest, final String eventid, final String method) { String classname = dest.getClass().getName(); String eid = eventid; String function = method; if(eid == null) eid = ""; if(function == null) function = ""; String key = classname+SEPARATOR+eid+SEPARATOR+function; return key; } private static boolean isHas(String key, String eventid) { if(key == null) return false; if(key.indexOf(SEPARATOR+eventid+SEPARATOR) > -1) return true; else return false; } public static void removeListener(final Object dest, final String eventid, String method) { mMapClassEventId.remove(getKey(dest,eventid,method)); } public static void dispatchEvent(Object source, String eventid, Object parameters) { Log.d("dispatchEvent","class="+source.getClass().getName()+",eventid="+eventid); EventMessage event = new EventMessage(source, eventid,parameters); notifyListeners(eventid, event); } private static void notifyListeners(String eventid, EventMessage event) { String key = ""; Set<String> keys = mMapClassEventId.keySet(); for (Iterator<String> it = keys.iterator(); it.hasNext();) { key = (String) it.next(); if(isHas(key, eventid)) { EventBusListener listener = (EventBusListener) mMapClassEventId.get(key); listener.onReceive(event.getEventId(), event.getParameters()); } } } }
相关文章推荐
- Flex、Java、C#、JavaFX的事件处理机制的比较
- Flex、Java、C#、JavaFX的事件处理机制的比较
- Java与Flex学习笔记(3)----理解Flash中的事件机制
- 使用javascript和java模仿实现事件回调机制
- Java设计模式_观察者模式&事件处理机制
- Flex,事件,绑定,机制
- java事件监听机制,spring中的event listener模式和解耦
- java事件机制及自定义事件处理
- java中的事件机制(续)
- Java 图形界面事件处理机制
- Java事件处理机制-事件监听器的实现方式
- Java的事件处理机制
- JAVA继承的拓展——接口和事件机制
- java事件处理机制(自定义事件)
- Flex 事件机制
- Flex事件机制
- JAVA事件监听机制学习
- java事件处理机制(自定义事件)
- 深入理解JAVA事件机制
- Java与Flex区别一:使用自定义事件