Il existe un moyen beaucoup plus simple de recevoir un résultat d'un DialogFragment.
Tout d'abord, dans votre activité, fragment ou activité de fragment, vous devez ajouter les informations suivantes:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
// Stuff to do, dependent on requestCode and resultCode
if(requestCode == 1) { // 1 is an arbitrary number, can be any int
// This is the return result of your DialogFragment
if(resultCode == 1) { // 1 is an arbitrary number, can be any int
// Now do what you need to do after the dialog dismisses.
}
}
}
C'est requestCode
fondamentalement votre étiquette int pour le DialogFragment que vous avez appelé, je vais montrer comment cela fonctionne dans une seconde. Le resultCode est le code que vous renvoyez du DialogFragment indiquant à votre Activity, Fragment ou FragmentActivity en attente ce qui s'est passé.
Le morceau de code suivant à entrer est l'appel au DialogFragment. Un exemple est ici:
DialogFragment dialogFrag = new MyDialogFragment();
// This is the requestCode that you are sending.
dialogFrag.setTargetFragment(this, 1);
// This is the tag, "dialog" being sent.
dialogFrag.show(getFragmentManager(), "dialog");
Avec ces trois lignes, vous déclarez votre DialogFragment, définissez un requestCode (qui appellera onActivityResult (...) une fois la boîte de dialogue fermée et vous affichez ensuite la boîte de dialogue. C'est aussi simple que cela.
Maintenant, dans votre DialogFragment, vous devez simplement ajouter une ligne juste avant le dismiss()
afin de renvoyer un resultCode au onActivityResult ().
getTargetFragment().onActivityResult(getTargetRequestCode(), resultCode, getActivity().getIntent());
dismiss();
C'est tout. Remarque, le resultCode est défini comme int resultCode
celui que j'ai défini resultCode = 1;
dans ce cas.
Voilà, vous pouvez maintenant renvoyer le résultat de votre DialogFragment à votre activité d'appel, fragment ou activité de fragment.
De plus, il semble que ces informations aient été publiées précédemment, mais aucun exemple suffisant n'a été donné, j'ai donc pensé fournir plus de détails.
EDIT 06.24.2016
Je m'excuse pour le code trompeur ci-dessus. Mais vous ne pouvez certainement pas recevoir le résultat de l'activité en tant que ligne:
dialogFrag.setTargetFragment(this, 1);
fixe un objectif Fragment
et non Activity
. Donc, pour ce faire, vous devez utiliser implémenter un InterfaceCommunicator
.
Dans votre DialogFragment
ensemble une variable globale
public InterfaceCommunicator interfaceCommunicator;
Créer une fonction publique pour la gérer
public interface InterfaceCommunicator {
void sendRequestCode(int code);
}
Ensuite , lorsque vous êtes prêt à envoyer le dos de code à Activity
quand l' DialogFragment
est fait en cours d' exécution, vous ajoutez simplement la ligne avant dismiss();
votre DialogFragment
:
interfaceCommunicator.sendRequestCode(1); // the parameter is any int code you choose.
Dans votre activité, vous devez maintenant faire deux choses, la première consiste à supprimer cette seule ligne de code qui n'est plus applicable:
dialogFrag.setTargetFragment(this, 1);
Ensuite, implémentez l'interface et vous avez terminé. Vous pouvez le faire en ajoutant la ligne suivante à la implements
clause tout en haut de votre classe:
public class MyClass Activity implements MyDialogFragment.InterfaceCommunicator
Et puis @Override
la fonction dans l'activité,
@Override
public void sendRequestCode(int code) {
// your code here
}
Vous utilisez cette méthode d'interface comme vous le feriez pour la onActivityResult()
méthode. Sauf que la méthode d'interface est pour DialogFragments
et l'autre est pour Fragments
.