Pergunta: Como se cria um retorno de chamada de um DialogFragment para outro Fragmento. No meu caso, a Atividade envolvida deve desconhecer completamente o DialogFragment.
Considere que eu tenho
public class MyFragment extends Fragment implements OnClickListener
Então, em algum momento eu poderia fazer
DialogFragment dialogFrag = MyDialogFragment.newInstance(this);
dialogFrag.show(getFragmentManager, null);
Onde se parece o MyDialogFragment
protected OnClickListener listener;
public static DialogFragment newInstance(OnClickListener listener) {
DialogFragment fragment = new DialogFragment();
fragment.listener = listener;
return fragment;
}
Mas não há garantia de que o ouvinte estará presente se o DialogFragment for pausado e retomado durante o seu ciclo de vida. As únicas garantias em um fragmento são aquelas transmitidas por meio de um pacote via setArguments e getArguments.
Existe uma maneira de referenciar a atividade se ela deve ser o ouvinte:
public Dialog onCreateDialog(Bundle bundle) {
OnClickListener listener = (OnClickListener) getActivity();
....
return new AlertDialog.Builder(getActivity())
........
.setAdapter(adapter, listener)
.create();
}
Mas não quero que a Atividade ouça eventos, preciso de um Fragmento. Realmente, poderia ser qualquer objeto Java que implemente o OnClickListener.
Considere o exemplo concreto de um fragmento que apresenta um AlertDialog via DialogFragment. Possui botões Sim / Não. Como posso enviar esses pressionamentos de botão de volta ao fragmento que o criou?
OnClickListener listener = (OnClickListener) getParentFragment();
no DialogFragment e seu Fragmento principal implementa a interface como você fez originalmente.