Передача данных назад к предыдущему фрагменту из текущего фрагмента

Я использую навигационный ящик в своем приложении. У меня есть одна MainActivity, а остальные - фрагменты. Таким образом, проблема заключается в том, что у меня есть три фрагмента, такие как A, B, C.

Теперь у меня есть одна кнопка, и я отправляю данные из A > B.
Например putSring ( "datafrom A", "datafrom A" ),
Теперь в B я получаю данные от A.
У меня есть одна кнопка в B, и я отправляю данные из B > C.
Например putSring ( "данные из B", "данные из B" ),
Теперь в C я получаю данные From B.
Затем у меня есть одна кнопка в C и отправка данных из C > B.
Например putSring ( "datafrom C", "datafrom C" );

Итак, похоже, что в B я получаю данные из двух разных фрагментов. Я пробовал использовать все действия, и он хорошо работает с startActivityforresult. но как я могу управлять, когда все являются фрагментами.

Ответ 1

Когда u отправляет данные из фрагмента A в фрагмент B, используйте те же логические значения, что и ниже: -

FragmentA → FragmentB

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, используйте тот же BOOLEAN, который используется в фрагменте 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, откуда, например, фрагмент A OR FragemntC

FragmentB

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

Ответ 2

Вы можете вызвать setTargetFragment(), когда вы запустите фрагмент C из B. Пример:

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

а затем, когда вы хотите передать данные обратно фрагменту B из C, вы можете вызвать следующий код:

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

и получить его из метода onActivityResult() в вашем фрагменте B:

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