2013-12-17 88 views
0

是否有任何方法可以爲所有活動在一個班級中舉辦活動?所有活動的活動

其實我正在使用自定義偵聽器並將它們註冊到某處。但我會知道我是否可以拋出一個像「newMessageEvent」或類似的自定義事件,並在每個活着的活動中接收它。

我正在使用一個好方法或存在一個更好?

有人知道嗎?

+0

爲什麼你需要在不活動的Activity上拋出keyEvent? –

+0

我不說一個KeyEvent,我說一些事件定製爲「newMessageEvent」 – ezefire

回答

0

回答我的問題做了很久以前幫助,如果有人需要它一個更多鈔票的解決方案是:

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); 

希望幫助!