2017-06-21 9 views
0

私はこれまでにこれに似た質問をしていましたが、あまりよく書かれておらず、構造も変わっています。Android:クラスからフラグメントへのメッセージの受け渡し

フラグメント内のボタンがクリックされたときにクラスにメッセージを送信しています。問題のクラスはMessageInterfaceです(実際にはインターフェースではありません)。

これで、このメッセージを別のフラグメントに送信し、そこのテキストを更新したいと考えています。これまで私が行ってきたことがあります。

これはMessageInterfaceクラスで、ログで証明されたときにメッセージを正常に受信します。

public class MessageInterface { 

    private String message; 
    private static MessageInterface instance = new MessageInterface(); 
    private Message msg = new Message(); 
    private Handler handler; 
    private Bundle bundle; 

    public MessageInterface() { 

    } 

    public static MessageInterface getInstance() { 
     return instance; 
    } 

    public void sendData(final String str) { 
     bundle = new Bundle(); 
     handler = new Handler(Looper.getMainLooper()); 
     handler.post(new Runnable() { 
      @Override 
      public void run() { 
       message = str; 
       if (!message.isEmpty()){ 
        Log.i("Interface", "Message Revieved in Interface"); 
        bundle.putString("Message", message); 
        msg.setData(bundle); 
        handler.sendMessage(msg); 
       } 
      } 
     }); 
    } 

    public String getData() { 
     return message; 
    }; 

} 

そして、これは、受信フラグメントのコードは次のとおりです。

private MessageInterface messageInterface = MessageInterface.getInstance(); 
@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onActivityCreated(savedInstanceState); 
    super.onActivityCreated(savedInstanceState); 

    statusText = (TextView) getActivity().findViewById(R.id.statusText); 

    handler2 = new Handler() { 
     @Override 
     public void handleMessage(Message msg) { 
      Bundle bundle = msg.getData(); 
      statusText.setText((bundle.getString("Message"))); 
      Log.i("Status", "Message Revieved in Status Fragment"); 
     } 
    }; 
} 

何もここに記録されません取得します。メッセージは送信されていません。

誰かが私にこれをうまく稼働させるためのヒントを教えてもらえますか?私はまた、これが最善の方法ではないように感じています。私は、ここを通って送られてくるデータの大量で終わる可能性があります。

できる場合はどうすれば改善できますか?

ありがとうございました。

答えて

0

個人的に詳細についてはお使いのAndroidアプリ

の部品間の通信にBroadcastReciever SまたはEventBusを使用して、私は、そのアプローチを好まないIdが示唆は、thisthis

+0

EventBusが面白そう見ます。確認してみるよ。ありがとう –

+0

こんにちは私はこのエラーが表示されます:ビューの階層を作成した元のスレッドのみがビューに触れることができます。私は独自のスレッドで作業しているクラスで新しいEventBusイベントを作成します。 UIスレッドでメッセージにアクセスするにはどうすればよいですか。 –

+0

onEventではなくonEventMainThreadを使用してこれを修正しました。 –

関連する問題