您的位置:首页 > 编程语言 > Java开发

Java 事件机制(模仿Flex事件机制)

2013-11-14 16:45 316 查看
1、事件源

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());
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: