Pytanie: W jaki sposób można utworzyć wywołanie zwrotne z DialogFragment do innego fragmentu. W moim przypadku, zaangażowana aktywność powinna być całkowicie nieświadoma DialogFragment.
Rozważ, że mam
public class MyFragment extends Fragment implements OnClickListener
Wtedy w pewnym momencie mogłem to zrobić
DialogFragment dialogFrag = MyDialogFragment.newInstance(this);
dialogFrag.show(getFragmentManager, null);
Gdzie wygląda MyDialogFragment
protected OnClickListener listener;
public static DialogFragment newInstance(OnClickListener listener) {
DialogFragment fragment = new DialogFragment();
fragment.listener = listener;
return fragment;
}
Ale nie ma gwarancji, że odbiornik będzie w pobliżu, jeśli DialogFragment zostanie wstrzymana i wznowiona przez cały cykl życia. Jedyne gwarancje we fragmencie to te przekazywane przez Bundle za pośrednictwem setArguments i getArguments.
Istnieje sposób odniesienia się do działania, jeśli powinien to być słuchacz:
public Dialog onCreateDialog(Bundle bundle) {
OnClickListener listener = (OnClickListener) getActivity();
....
return new AlertDialog.Builder(getActivity())
........
.setAdapter(adapter, listener)
.create();
}
Ale nie chcę, aby działanie nasłuchiwało wydarzeń, potrzebuję fragmentu. Naprawdę może to być dowolny obiekt Java, który implementuje OnClickListener.
Rozważ konkretny przykład fragmentu, który przedstawia AlertDialog za pośrednictwem DialogFragment. Posiada przyciski Tak / Nie. Jak mogę wysłać te naciśnięcia przycisku z powrotem do fragmentu, który go utworzył?
OnClickListener listener = (OnClickListener) getParentFragment();
zamiast tego po prostu użyć w DialogFragment, a twój główny fragment implementuje interfejs, tak jak pierwotnie.