Android: обратный вызов фрагмента из DialogFragment?
Я знаю, что для передачи чего-либо из фрагмента в вызывающую активность вы можете использовать onAttach, у которого есть параметр "активность". Вы можете установить активность в переменную и вызвать интерфейс для нее позже. Таким образом, передача данных из фрагмента обратно в активность. Все здорово.
Я хотел бы сделать то же самое, но на этот раз у меня есть стандартный фрагмент, и я хочу позвонить DialogFragment
а затем иметь DialogFragment
перезвонить на оригинальный фрагмент, но я не могу использовать onAttach
это хочет Activity
,
Кто-нибудь знает лучший способ сделать это?
Спасибо
2 ответа
Очевидно, что вы можете просто обнародовать вещи в своей деятельности и выделить их из своего фрагмента. Но тогда вы должны сохранять ссылки на свою деятельность и, возможно, иметь нежелательные публичные переменные и / или сеттеры.
Вы можете использовать EventBus, и вам это не понадобится.
В вашей деятельности вам нужно зарегистрировать событие
@Override
public void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}
@Override
public void onStop() {
EventBus.getDefault().unregister(this);
super.onStop();
}
// This method will be called when a MessageEvent is posted
public void onEvent(MessageEvent event){
Toast.makeText(getActivity(), event.message, Toast.LENGTH_SHORT).show();
}
Тогда вы можете просто вызвать ваше событие из вашего фрагмента или где угодно,
EventBus.getDefault().post(new MessageEvent("Hello everyone!"));
Еще немного информации о EventBus можно найти здесь И еще один, возможно, полезный учебник.
Один из способов связаться с другим фрагментом оттуда - получить к нему доступ в реализованном методе Activity
:
//In your Activity...
@Override
public void callbackFromFragmentA(){
FragmentB fragment = (FragmentB) getFragmentManager.findFragmentById(android.R.id.content);
if (fragment != null) {
fragment.callFragmentMethod();
}
}