Запитання: Як створюється зворотний виклик з діалогового фрагмента до іншого фрагмента. У моєму випадку Діяльність, яка бере участь у роботі, повинна повністю не знати про 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 призупиняється і відновлюється протягом свого життєвого циклу. Єдині гарантії у Фрагменті - це ті, які передаються через пакет із набором аргументів та getArguments.
Існує спосіб посилання на діяльність, якщо вона повинна бути слухачем:
public Dialog onCreateDialog(Bundle bundle) {
OnClickListener listener = (OnClickListener) getActivity();
....
return new AlertDialog.Builder(getActivity())
........
.setAdapter(adapter, listener)
.create();
}
Але я не хочу, щоб Активність слухала події, мені потрібен фрагмент. Дійсно, це може бути будь-який об’єкт Java, який реалізує OnClickListener.
Розглянемо конкретний приклад фрагмента, який представляє AlertDialog через DialogFragment. У ньому є кнопки Так / Ні. Як я можу повернути ці натискання кнопок назад на Фрагмент, який його створив?
OnClickListener listener = (OnClickListener) getParentFragment();
в DialogFragment натомість, а ваш основний фрагмент реалізує інтерфейс, як ви робили раніше.