Вопрос: Как создать обратный вызов из DialogFragment в другой Fragment. В моем случае, Активность должна полностью не знать о DialogFragment.
Считай, у меня есть
public class MyFragment extends Fragment implements OnClickListener
Тогда в какой-то момент я мог сделать
DialogFragment dialogFrag = MyDialogFragment.newInstance(this);
dialogFrag.show(getFragmentManager, null);
Где выглядит MyDialogFragment
protected OnClickListener listener;
public static DialogFragment newInstance(OnClickListener listener) {
DialogFragment fragment = new DialogFragment();
fragment.listener = listener;
return fragment;
}
Но нет никакой гарантии, что слушатель будет рядом, если DialogFragment приостановится и возобновит свой жизненный цикл. Единственными гарантиями во фрагменте являются те, которые передаются через Bundle через setArguments и getArguments.
Существует способ ссылаться на активность, если это должен быть слушатель:
public Dialog onCreateDialog(Bundle bundle) {
OnClickListener listener = (OnClickListener) getActivity();
....
return new AlertDialog.Builder(getActivity())
........
.setAdapter(adapter, listener)
.create();
}
Но я не хочу, чтобы Activity прослушивала события, мне нужен фрагмент. Действительно, это может быть любой объект Java, который реализует OnClickListener.
Рассмотрим конкретный пример фрагмента, который представляет AlertDialog через DialogFragment. Он имеет кнопки Да / Нет. Как я могу отправить эти нажатия кнопки назад на фрагмент, который его создал?
OnClickListener listener = (OnClickListener) getParentFragment();
вместо этого DialogFragment, а ваш основной фрагмент реализует интерфейс, как вы делали изначально.