0
是否有任何方法可以爲所有活動在一個班級中舉辦活動?所有活動的活動
其實我正在使用自定義偵聽器並將它們註冊到某處。但我會知道我是否可以拋出一個像「newMessageEvent」或類似的自定義事件,並在每個活着的活動中接收它。
我正在使用一個好方法或存在一個更好?
有人知道嗎?
是否有任何方法可以爲所有活動在一個班級中舉辦活動?所有活動的活動
其實我正在使用自定義偵聽器並將它們註冊到某處。但我會知道我是否可以拋出一個像「newMessageEvent」或類似的自定義事件,並在每個活着的活動中接收它。
我正在使用一個好方法或存在一個更好?
有人知道嗎?
回答我的問題做了很久以前幫助,如果有人需要它一個更多鈔票的解決方案是:
1-創建管理事件這樣一個Singleton類:
public class EventsManager {
public enum EventType{
//Define here your types
}
public interface EventsManagerListener{
void onEvent(EventType eventType);
}
private static EventsManager instance;
private HashMap<EventType,List<EventsManagerListener>> listenersMap;
private EventsManager(){
listenersMap = new HashMap<>();
}
public static EventsManager getInstance(){
if(instance == null){
instance = new EventsManager();
}
return instance;
}
public void registerForEvent(EventType eventType, EventsManagerListener listener){
List<EventsManagerListener> eventListeners = listenersMap.get(eventType);
if(eventListeners == null){
eventListeners = new ArrayList<>();
listenersMap.put(eventType,eventListeners);
}
if(!eventListeners.contains(listener)) {
eventListeners.add(listener);
}
}
public void unregisterForEvent(EventType eventType, EventsManagerListener listener){
List<EventsManagerListener> eventListeners = listenersMap.get(eventType);
if(eventListeners != null){
eventListeners.remove(listener);
}
}
public void throwEvent(EventType eventType){
List<EventsManagerListener> eventListeners = listenersMap.get(eventType);
if(eventListeners != null){
//This iteration sends the event to the newest activity first
for(int i = eventListeners.size()-1; i >= 0; i--){
EventsManagerListener listener = eventListeners.get(i);
listener.onEvent(eventType);
}
}
}
}
2-小類(例如MyBaseActivity)
public class MyBaseActivity extends Activity{
}
3-覆蓋的onCreate活動和方法的onDestroy並調用事件管理,使活動實施EventsManagerListener
public class MyBaseActivity extends Activity implements EventsManagerListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//...
EventsManager.getInstance().registerForEvent(THE_EVENT_YOU_WANT, this);
}
@Override
protected void onDestroy(Bundle savedInstanceState) {
super.onDestroy(savedInstanceState);
//...
EventsManager.getInstance().unregisterForEvent(THE_EVENT_YOU_WANT, this);
}
public void onEvent(EventsManager.EventType eventType){
//... handle the event
}
}
4-最後,你得叫您要到下一行發送事件:
EventsManager.getInstance().throwEvent(YOUR_EVENT);
希望幫助!
爲什麼你需要在不活動的Activity上拋出keyEvent? –
我不說一個KeyEvent,我說一些事件定製爲「newMessageEvent」 – ezefire