2014-03-13 73 views
2

過去幾天我一直在玩奧托,這真是太神奇了。然而,我遇到了一個問題,我試圖從片段與Activity進行通信。爲了簡單起見,我有一個用於保存片段的Activity,並且在片段中我有一個Button,它只是簡單地發佈一個事件。奧托從片段到活動溝通

@Inject Bus bus; 
... 
... 
bus.post(new ReadStatusEvent("23")); 

在我有一個訂閱方法的活動。

@Subscribe 
public void onReadStatusEvent(ReadStatusEvent event){ 
    Timber.i("sub:"+event.getReadStatusID()); 
} 

這裏是事件

public class ReadStatusEvent { 
    private final String readStatusID; 

    public ReadStatusEvent(String readStatusID) { this.readStatusID = readStatusID; } 

    public String getReadStatusID() { return readStatusID; } 
} 

我用匕首,所以我的奧托總線是單這被注入b y SimpleModule文件。

@Provides @Singleton 
Bus provideBus() { 
    return new Bus(ThreadEnforcer.ANY); 
} 

我一直在這一整天,但由於某種原因,訂閱方法從來沒有被調用。

編輯:我使用Otto plugin for Android Studio只是嘗試,每當我點擊@Subscribe或bus.post(..),它不斷尋找,但沒有找到任何東西(沒有使用迄今發現的)。我想我在某個地方做了非常錯誤的事情。

+0

該插件目前被破壞,所以它不是你。 – Krylez

回答

11

關於Otto Plugin的提示讓我想起了你的進口產品。

您確定您使用的是「com.squareup.otto.Subscribe」而不是「com.google.common.eventbus.Subscribe」或任何其他包嗎?

+0

FML!你是對的,我從來沒有注意到進口,只是改變它,現在它的工作完美無瑕。非常感謝! –

0

爲了接收事件,類實例需要在總線上註冊。你註冊持有你的訂戶/生產者的對象嗎?

bus.register(this); // Example 
+0

是的,我將它放在Activity和Fragment的onStart()中。 –