2016-09-30 10 views
1

を閉じて、開いているために、複数回受信しました私の断片。ブロードキャストは、私は次のような問題を持って活動

// Broadcast receiver que recibe las emisiones desde los servicios 
private class ResponseReceiverFragment extends BroadcastReceiver { 

    // Sin instancias 
    private ResponseReceiverFragment() { 
    } 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     switch (intent.getAction()) { 

      case "serv_connected": 
       MyService aux = activity.getmService(); 
       mUserList = MyService.xmpp.getOnlineUsers(); 

       iconloader.hide(); 
       break; 

     } 
    } 
} 

この断片は、スライディングタブを有する3つの断片を含む活性の範囲内であり、まれなものではない。

問題は次のとおりです。 入力してブロードキャストアクティビティがトリガされると、フラグメントが正しく受信されます。 私が戻ってくると(アクティビティを閉じる)、再びアクティビティを開き、そのフラグメントがブロードキャストを2回受信するなど...

何が起こっているのですか? さらにコードが必要な場合は追加できます。

は、私は同じ問題を抱えていたし、本当に簡単solution.Iでそれを扱っあなた

+0

私が想定しonPause()で登録解除レシーバーを取り外す際に私の問題は解決あなたのフラグメントはキャッシュされていないか状態が保存されていないので、Androidは 'onCreate()'を起動します - 'onCreate()'が呼び出されたときにいくつかのログインを追加してください。状態を管理する – brandall

+0

状態を知ることができますか? 私が知っている、私は何も保持していないかキャッシング:-S .... しかし、それは安全ではありません。 どうすれば確認できますか? – daicon

+0

'onCreate()'にログインを追加し、logcatを呼び出して呼び出された回数と呼び出された時刻を確認します。たとえば、タブ間を移動するたびに動きます。スライディングタブを使用してフラグメント状態を保存する方法に関する記事。 – brandall

答えて

0

私は成功したコメントへの感謝を解決するために管理:

1º - onDestroy O OnPauseに登録解除する必要がある:

:彼はそのようにした放送を起動すると

 getActivity().registerReceiver(receiver, filter); 

  LocalBroadcastManager.getInstance(getBaseContext()).sendBroadcast(localIntent); 

しかし、これを行う必要があります:

  getApplicationContext().sendBroadcast(localIntent); 

、誰もがそれを認める説明することができた場合はまだ私は(1ヶ月前、私はアンドロイドでプログラム)なぜ

を理解していません。

挨拶

1

ありがとうちょうど放送が既にトリガであるかどうかをチェックするためにフラグ値を追加しました。

boolean broadcastTriggerd = false; 
@Override 
public void onReceive(Context context, Intent intent) { 
if(!broadcastTriggered){ 
    broadcastTriggerd = true; 
    switch (intent.getAction()) { 

     case "serv_connected": 
      MyService aux = activity.getmService(); 
      mUserList = MyService.xmpp.getOnlineUsers(); 

      iconloader.hide(); 
      break; 

     } 
    } 
} 
+0

ありがとうございました。 しかし、解決策は正しくありません。問題は依然として存在します。 つまり、okiは今すぐ必要なコードを1回だけ実行します。しかし、放送はまだ何度も送信され、私は活動を終了して開きます:-(( ありがとうございました – daicon

+0

私はあなたが放送受信機onDestroyの登録を解除していないと仮定します()の活動の方法? –

1

コメントで述べたように、問題はあなたのフラグメントのOnDestroy()に受信機の登録を解除していないです。

あなたが受信機を登録したコンテキストに関しては

は、それは単純な答えではないのですが、あなたは、より詳細に読むことができますhere

0

関連する問題