У меня есть два фрагмента Fragment1 и Fragment2, во Fragment1 я использую findNavController().navigate(), запускаю Fragment2, когда Fragment2 закончен, как передать данные во Fragment1? (Перевести Google)
Вы можете использовать getParentFragment() в Fragment2 для передачи данных во Fragment1. Это работает, только если вы создаете Fragment2 через getChildFragmentManager() Fragment1.
Если вы используете getSupportFragmentManager() из Activity, вам нужно создать прослушиватель.
class Fragment2 {
private UpdateFragment1Listener updateFragment1Listener;
void sendDataToFragment1() {
updateFragment1Listener.updateFragment(myData);
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
if (context instanceof UpdateFragment1Listener ) {
updateFragment1Listener = (UpdateFragment1Listener ) context;
} else {
throw new RuntimeException(context.toString()
+ " must implement UpdateFragment1Listener ");
}
}
@Override
public void onDetach() {
super.onDetach();
updateFragment1Listener = null;
}
interface UpdateFragment1Listener {
void updateFragment1(MyData myData);
}
}
class MyActivity implements Fragment2.UpdateFragment1Listener {
private Fragment1 fragment1;
@Override
void updateFragment1(MyData myData) {
fragment1.update(myData);
}
}
Я хочу официальное решение, а не интерфейс. Все же разрешите поблагодарить вас. Теперь я использовал EventBus для решения этой проблемы.
Я не знаю, насколько официальным вы хотите, чтобы это было, но решение интерфейса буквально исходит от самой Android Studio. Но да, EventBus должен работать.
Дубликат: stackoverflow.com/questions/56243119/…