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();
    }
}
Другие вопросы по тегам