2017-02-16 1 views
3

Fragmentを3つネストしたViewPagerを使用しました。イベントハンドリングにEventBusを使用しました。 私の場合、subscribeメソッドは複数回呼び出されます。 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(); 
    } 

の登録を解除registering NDのためにこれらのメソッドを使用している 私viewpagernavigation drawer fragmentで利用可能です。 私は更新された私のこのようなonresume()が、それでも同じことが起こる

​​3210

}

ネストされたAPIが呼び出されるthatsの理由を複数回で受信されたこれらのイベントを複数回

@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では、2つのフラグメントが表示用に用意されています。表示されているフラグメントと次に表示されるフラグメントは、onResumeが複数回呼び出された最初のものに置き換えられます。

EventBusを登録するために、可視性をチェックし、isResumedをフラグメント化します。

可視性の状態はここでチェックすることができる。

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

チェックを使用すると、メソッドisRegisteredを(使用してチェックすることができ、ここで前か

登録EventBus

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

プラザので....私はStackOverflowのために新しいです....複数回で 'のonEvent()' –

+0

ポストコードを受け取った私のonresume更新方法....まだイベントをチェック書式設定が正しく行われていません.... thnks –

+0

PLZのonEventチェック方法の –

0

これは、イベントバスを2回登録するためです。

イベントバスが登録されていない場合は、イベントバスのみを登録する必要があります。

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

私はonResume()plz chkを一度更新しました –

+0

あなたが間違ったことをしている場合は、もう一度イベントバスを登録してください –

関連する問題