Передача данных назад к предыдущему фрагменту из текущего фрагмента
Я использую навигационный ящик в своем приложении. У меня есть одна 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");
}
}