2017-02-13 10 views
0

FragmentAのTextViewを押すと、FragmentBにテキストを設定できるようにインターフェイスを作成しました。何かが機能していないと私はこれを把握することはできません。別のフラグメントと通信するためのインターフェイスを作成する

私はコミュニケータと呼ばれるインターフェースを作成しました

:私はTextViewの上CommuncatorとOnClickListenerというインターフェイス上に基準を設定しているFragmentAで

public interface Communicator { 
void respond(String data); 

}

を:

Communicator comm; 

homeTextView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      comm.respond("Trying to set text on FragmentB from here"); 
     } 
    }); 

フラグメントB、テキストを変更する私の方法を設定してください:

MainActivityに私はインターフェイスを実装しました

は最後に..私はここだと思う私は間違って何かやっているところです。

@Override 
public void respond(String data) { 

    getSupportFragmentManager().beginTransaction() 
      .replace(R.id.container_main, new FragmentB(), "fragment2").addToBackStack(null).commit(); 

    FragmentB fragmentB= (FragmentB) getSupportFragmentManager().findFragmentByTag("fragment2"); 
    if (fragmentB != null) { 
     fragmentB.setText(data); 
    } 


} 

フラグメント2つの負荷をが、テキストは空です。

+0

である。私は問題がMainActivityの応答関数にあると思います。あなたが 'commit()'を呼び出すとUIスレッドで実行されず、完了するまでに時間がかかり、その後にnullであると宣言するfragmentBが発生します。 – TruongHieu

答えて

2

フラグメント2はロードされますが、テキストは空です。

あなたはCommunicatorを実装してokですが、あなたはFragmentB呼び出す方法とデータを渡してもOKではありません。それがFragmentBからテキストを取得できない理由です。 FragmentBにデータを送信するための正しい方法は次のようにする必要があります:

public static FragmentB createInstance(String data) { 
     FragmentB fragment = new FragmentB(); 
     Bundle bundle = new Bundle(); 
     bundle.putString("data", data); 
     fragment.setArguments(bundle); 
     return fragment; 
    } 

そして、あなたがでFragmentBからデータを取得することができます:あなたはfragmentBを宣言した後、あなたが設定することを意味しているように見えます

Bundle bundle = getArguments(); 
     if (bundle != null) { 
      String data = bundle.getString("data"); 
     } 
1

その断片のテキスト代わりにtrainFinderFragment.setText()を呼び出しています。それはあなたの問題ですか?

FragmentB fragmentB= (FragmentB) getSupportFragmentManager().findFragmentByTag("fragment2"); 
if (fragmentB != null) { 
    fragmentB.setText(data); 
} 
+0

質問を編集しました。 FragmentBは実際にはTrainFinderFragmentと呼ばれますが、ここではFragmentBという名前に変更されていますので、すべての人にとってより明確です。 – r3dm4n

+0

大丈夫です。うん、あなたの編集を与え、上記の忠告のアドバイスを取る必要があります。バンドルでテキストを渡します。 –

関連する問題