web-dev-qa-db-ja.com

現在のフラグメントから前のフラグメントにデータを戻す

アプリでNavigation Drawerを使用しています。 MainActivityが1つあり、残りはFragmentsです。したがって、問題は、A、B、Cのような3つのフラグメントがあるとします。

現在、Aにはボタンが1つあり、A> Bからデータを送信しています。
たとえば、putSring( "datafrom A"、 "datafrom A");
BでAからデータを受信します。
Bにボタンが1つあり、B> Cからデータを送信しています。
たとえば、putSring( "datafrom B"、 "datafrom B");
CでBからデータを受信します。
次に、Cに1つのボタンがあり、C> Bからデータを送信します。
たとえば、putSring( "datafrom C"、 "datafrom C");

だから、Bのように私は2つの異なるフラグメントからデータを取得しています。私はすべてのアクティビティを使用して試しましたが、startActivityforresultでうまく機能します。しかし、すべてがフラグメントである場合、どのように管理できますか?.

15
chris

UがフラグメントAからフラグメントBにデータを送信する場合、以下のような同じブール値を使用します。

フラグメントA->フラグメントB

FragmentB ldf = new FragmentB ();
Bundle args = new Bundle();
args.putBoolean("BOOLEAN_VALUE",true);
ldf.setArguments(args);

getFragmentManager().beginTransaction().add(R.id.container, ldf).commit();

そして、uがフラグメントCからフラグメントBにデータを送信する場合、以下のようにフラグメントAからBで使用されるのと同じブール値を使用します。

FragmentC-> FragmentB

FragmentB ldf = new FragmentB ();
    Bundle args = new Bundle();
    args.putBoolean("BOOLEAN_VALUE",false);
    ldf.setArguments(args);

    getFragmentManager().beginTransaction().add(R.id.container, ldf).commit();

そして最後に、FragmentBの値がFragment A OR FragemntC

FragmentB

   Boolean getValue= getArguments().getBoolean("BOOLEAN_VALUE");  
   if(getValue)
   {
    //VALUE RECEIVED FROM FRAGMENT A
   }
   else
   {
   //VALUE RECEIVED FROM FRAGMENT C
   }
5

BからフラグメントCを開始するときにsetTargetFragment()を呼び出すことができます。例:

FragmentC fragmentC = FragmentC.newInstance();
fragmentC.setTargetFragment(FragmentB.this, REQUEST_CODE);
getFragmentManager().beginTransaction().replace(R.id.container, fragmentC).commit();

そして、CからフラグメントBにデータを戻す場合、次のコードを呼び出すことができます。

getTargetFragment().onActivityResult(
                getTargetRequestCode(),
                Activity.RESULT_OK,
                new Intent().putExtra("datafrom C", "datafrom C")
);

フラグメントBのonActivityResult()メソッドから取得します。

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode==REQUEST_CODE && resultCode==Activity.RESULT_OK) {
        String datafromC = data.getStringExtra("datafrom C");   
    }
}
53
CodePlay