2017-02-16 42 views
3

我使用ViewPager與3個嵌套Fragment。我使用EventBus進行事件處理。 但在我的情況下,訂閱方法被多次調用。因爲EventBus獲得多次註冊。 我已經使用了這些方法registering一個第二註銷EventBus查看具有多個片段的尋呼機 - Eventbus獲得多次註冊

 @Override 
    public void onStop() { 
     if (eventBus != null) { 
      eventBus.unregister(this); 
     } 
     super.onStop(); 
    } 

    @Override 
    public void onPause() { 
     if (eventBus != null) { 
      eventBus.unregister(this); 
     } 
     super.onPause(); 
    } 

    @Override 
    public void onResume() { 
     if (eventBus != null) { 
      eventBus.register(this); 
     } 
     super.onResume(); 
    } 

viewpagernavigation drawer fragment可用。 我更新了我的onresume()喜歡這一點,但仍然同樣的事情發生

​​3210

}

通過多次收到這些事件這就是爲什麼嵌套API獲取調用多次

@Subscribe 
public void onEvent(Event event) { 
    Responce Responce = event.responce; 
    if (regResponce != null && regResponce.getStatus() == 0) { 
     if (!isGenerateReportCalled) { 
      isGenerateReportCalled = true; 
      accountManager.generateReport(parameter); // server api call get called multiple times 
     } 
    } else { 
     // error message 
    } 
} 

回答

0

你應該嘗試當片段變得對用戶可見時,註冊EventBus。在ViewPager中,準備顯示兩個片段,一個是可見的,另一個將被第一個替換,這就是爲什麼您多次調用onResume的原因。

檢查可見性併爲註冊事件總線的片段進行恢復。

可見性狀態可以在這裏檢查:

public class SomeFrag extends Fragment { 
    @Override 
    public void setMenuVisibility(final boolean visible) { 
     super.setMenuVisibility(visible); 
     if (visible) { 
     // Register EventBus 
     } 
    } 
} 
0

檢查EventBus之前註冊與否

在這裏你可以查看使用方法isRegistered()

if(!eventBus.isRegistered(this)) 
     eventBus.register(this); 

刪除其他部分來自onResume()

@Override 
public void onResume() { 
if (eventBus != null) { 
     if (!eventBus.isRegistered(this)) { 
     eventBus.register(this); 
     } 
    } 
    super.onResume(); 
} 
+0

PLZ檢查我更新的onResume方法....仍然多次收到的onEvent的' –

+0

郵編事件()' –

+0

PLZ檢查的OnEvent方法....我是新來的StackOverflow ....所以格式化不正確.... thnks –

0

這是因爲您正在註冊兩次事件總線。

如果事件總線沒有註冊,那麼只有你必須註冊事件總線。

   @Override 
      public void onResume() { 
       if (eventBus != null) { 
         if (!eventBus.isRegistered(this)) { 
         eventBus.register(this); 
        } 
       } 
       super.onResume(); 
      } 
+0

我已更新我的onResume()plz chk一次 –

+0

您做錯了其他事情再次註冊事件總線 –

相關問題