Mise à jour fragment de fragment de dialogue de sélection des options
J'ai fragment sur un composant, cliquez sur pop-ups DialogFragment. Ce fragment de dialogue liste d'options. Lorsqu'une option de la liste est sélectionné je veux vous informer fragment afin que je puisse courir les champs procédure de mise à jour.
J'ai fait quelque chose comme cela
@Override
public void onClick(DialogInterface dialog, int item) {
updateSharedPreference(item);
Log.e("ProfilePersonaListDialog", "Click on dialog, inside onClick");
OnCloseListDialogListener act = (OnCloseListDialogListener) getActivity();
act.onDialogListSelection();
dismiss();
}
Cependant cette getActivity() appelle FragmentActivity et pas le fragment qui a déclenché la boîte de dialogue fragment.
Je pourrais tuer actuellement ouvert/court fragment et un appel à une nouvelle instance qui serait mis à jour les champs, mais c'est sale solution que je préfère éviter.
Des suggestions sur la façon de faire la mise à jour de fragment, une fois l'option sélectionnée dans la boîte de dialogue fragment?.
- À l'aide de FragmentManager vous pouvez obtenir le même
Vous devez vous connecter pour publier un commentaire.
Juste de rentrer avec la solution. Mon problème était en fait la redirection de courant fragment getTag() chaîne de caractères comme paramètre de la méthode show() pour DialogFragment. Si quiconque s'intéresse ici est l'échantillon de travail.
Créer simple auditeur
Créer de nouveaux boîte de dialogue qui s'étendent DialogFragment
Et puis dans le fragment à partir de laquelle vous souhaitez appeler cette boîte de dialogue, procédez comme ci-dessous. DIALOGUE est juste constante de Chaîne j'y mets juste de dialogue
Il est nécessaire dans la plupart des cas, qu'un
Fragment
être conscient qu'il est en cours d'exécution dans le contexte d'uneActivity
et acceptable pour l'enfant Fragment d'appeler une méthode sur une interface implicitement mis en œuvre par le parent de l'Activité (comme l'a démontré par la fonte dans votre extrait de code). Lorsque vous obtenez vos références de travail comme Tomasz points, vous serez au top.Cependant, 🙂 à l'aide de la ré-utilisabilité de la boîte de dialogue fragment, je voudrais suggérer que vous tirer parti de
BroadcastReceiver
s. Un BroadcastReceiver simplement diffuse un message disant j'ai fait "x". L'activité parent ou dans tout autre haut niveau composant peut alors déclarer je suis à l'écoute de 'x'. Une fois, l'événement a été déclenché dans la boîte de dialogue composant, cet événement sera perçue par le parent de l'ActivitéonReceive
où vous pouvez exécuter le code nécessaire à la mise à jour de vos champs.Sur un plan personnel, je préfère ce couplage lâche plus le casting approche de l'interface car il m'oblige à réfléchir à la finalité de chaque Fragment et de le garder modulaire.
Si vous voulez lui donner un coup de feu, puis à lire sur le dev section du guide sur BroadcastReceivers et suivez cette procédure;
Mettre en œuvre les
BroadcastReceiver
dans votre activité parent. L'avis d'unonReceive
méthode doit être mise en œuvre.Remplacer le parent de l'Activité
onResume
méthode et d'enregistrer l'activité d'un récepteur de l'événement avec l'intention à l'action "blah". Quelque chose comme;Remplacer le parent de l'Activité
onPause
méthode annuler l'enregistrement de l'activité du récepteur de façon à éviter de " fuite des récepteurs (vous verrez).Dans votre
DialogFragment
onClick
feu de l'événement de votre activité parent est "à l'écoute" pour.Le parent de l'activité de recueillir le message et vous pouvez continuer le traitement. Laissez-moi savoir si vous décidez d'adopter cette méthode.
Juste la façon dont vous l'avez fait ci-dessus et ajouter qqch comme ça dans votre activité :
Bien sûr, si vous n'êtes pas en charge de la Bibliothèque puis appeler
getFragmentManager
au lieu degetSupportFragmentManager
.DialogTransaction.add(int containerViewId, Fragment fragment, String tag)
au lieu deDialogTransaction.add(int containerViewId, Fragment fragment)
(DailogFragment deshow
semble avoir une version avec un tag argument:DailogFragments.show(FragmentTransaction transaction, String tag)
)ProfilePersonaListDialog.newInstance(personaData, tag).show(getSupportFragmentManager().beginTransaction(), tag);
C'est là que vous pouvez stocker le fragment retourné par newInstance usine méthode que les activités du champ de membre, mais sur le côté vous êtes en possession d'un numéro de série pour identifier ce fragment donc peut-être que ce n'est pas nécessaire