2017-02-16 4 views
3

Я использовал ViewPager с 3 вложенными Fragment. Я использовал EventBus для обработки событий. Но в моем случае метод subscribe вызывается несколько раз. Потому что 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(); 
    } 

Моего viewpager доступен в navigation drawer fragment. Я обновил свой onresume() как это, но все-таки происходит то же самое

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

}

Эти события получили по несколько раз то почему вложенная апи вызывается несколько раз

@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

Вы должны попробовать register EventBus, когда фрагмент становится видимым для пользователя. В ViewPager для отображения отображаются два фрагмента, один из которых видимый и следующий, который будет заменен первым, поэтому вы вызываете onResume несколько раз.

Проверить видимость и isResumed для фрагмента для регистрации EventBus.

Видимость состояние может быть проверено здесь:

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

плз проверить свой обновленный onresume метод .... до сих пор событие получено несколько раз –

+0

почтовый индекс из 'OnEvent()' –

+0

плз проверить OnEvent метод .... я новичок в StackOverflow .... так форматирование не выполнено должным образом .... thnks –

0

Это потому, что вы регистрируете автобус событий дважды.

Если автобус события не зарегистрирован, вам нужно только зарегистрировать автобус событий.

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

я был обновлен my onResume() plz chk один раз –

+0

Ваше неправильное действие еще раз повторите регистрацию eventbus –

Смежные вопросы