I used ViewPager with 3 nested Fragment.I used EventBus for event handling.
But in my case subscribe method gets called by multiple times. Because EventBus gets register by multiple times.
I have used these methods for registeringa nd unregistering 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();
}
My viewpager is available in navigation drawer fragment.
I was updated my onresume() like this but still same thing happens
@Override
public void onResume() {
if (eventBus != null) {
if (!eventBus.isRegistered(this)) {
eventBus.register(this);
}else{
eventBus.unregister(this);
eventBus.register(this);
}
}
super.onResume();
}
These event received by multiple times thats why nested api gets called multiple times
@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
}
}
You should try to register EventBus when fragment become visible to user. In ViewPager two fragments are prepared for display, one which is visible and next which will be replaced with first one that's why you get called onResume multiple times.
Check visibility and isResumed for fragment for registering EventBus.
Visibility state may be checked here: