Domanda: come si crea un callback da un DialogFragment a un altro frammento. Nel mio caso, l'attività in questione dovrebbe essere completamente inconsapevole di DialogFragment.
Considera che ho
public class MyFragment extends Fragment implements OnClickListener
Poi ad un certo punto ho potuto fare
DialogFragment dialogFrag = MyDialogFragment.newInstance(this);
dialogFrag.show(getFragmentManager, null);
Dove si presenta MyDialogFragment
protected OnClickListener listener;
public static DialogFragment newInstance(OnClickListener listener) {
DialogFragment fragment = new DialogFragment();
fragment.listener = listener;
return fragment;
}
Ma non vi è alcuna garanzia che l'ascoltatore sarà presente se DialogFragment fa una pausa e riprende durante il suo ciclo di vita. Le uniche garanzie in un frammento sono quelle passate attraverso un pacchetto tramite setArguments e getArguments.
C'è un modo per fare riferimento all'attività se dovrebbe essere l'ascoltatore:
public Dialog onCreateDialog(Bundle bundle) {
OnClickListener listener = (OnClickListener) getActivity();
....
return new AlertDialog.Builder(getActivity())
........
.setAdapter(adapter, listener)
.create();
}
Ma non voglio che l'attività ascolti gli eventi, ho bisogno di un frammento. In realtà, potrebbe essere qualsiasi oggetto Java che implementa OnClickListener.
Considera l'esempio concreto di un frammento che presenta un AlertDialog tramite DialogFragment. Ha pulsanti Sì / No. Come posso inviare queste pressioni del pulsante al frammento che lo ha creato?
OnClickListener listener = (OnClickListener) getParentFragment();
DialogFragment e il tuo frammento principale implementa l'interfaccia come facevi in origine.