La meilleure façon de gérer le comportement sur DialogFragment?
J'ai donc un DialogFragment l'affichage de sélection de la Zone de liste. Une fois que l'utilisateur clique sur la zone, la liste récupère à nouveau les données à afficher, Rue de liste de sélection. À ce stade, je voudrais permettre à l'utilisateur d'appuyer sur bouton de retour pour revenir à la Zone de sélection. Est-ce possible? J'ai essayé de remplacer quelques méthodes ci-dessous, mais je ne touchez à l'événement, mais pas l'arrêter de se produire.
@Override
public void onCancel(DialogInterface dialog) {
if(isDismissable()){
super.onCancel(dialog);
}else {
Log.d(TAG, "Don't dismiss cancel this dialog!");
}
}
@Override
public void dismissAllowingStateLoss() {
if(isDismissable()){
super.dismissAllowingStateLoss();
}else {
Log.d(TAG, "Don't dismiss this dialog!");
}
}
@Override
public void dismiss() {
if(isDismissable()){
super.dismiss();
}else {
Log.d(TAG, "Don't dismiss this dialog!");
}
}
dismiss()
appelée lorsque l'utilisateur appuyez sur la touche retour, mais même si je ne l'appelez pas super.dismiss()
, la boîte de dialogue obtenir licenciés indépendamment.
Est-il un moyen de faire cela? Je regarde aussi comment Google+ application affiche ActionBar
dans le DialogFragment de fournir HomeAsUp
mais je ne trouve aucune info sur elle.
OriginalL'auteur RobGThai | 2013-12-17
Vous devez vous connecter pour publier un commentaire.
Je vois deux solutions:
Le plus simple: Avez-sélection de la Zone et de la Rue de liste de sélection à la fois comme distinct d'habitude fragments et ont tous les deux une activité distincte et ont cette activité comme une boîte de dialogue par le biais d'un thème simple:
<activity android:theme="@android:style/Theme.Dialog" />
et ontexcludeFromRecents="true"
pour ne pas avoir ce dans les récents applications utilisées.La zone de sélection est chargé en premier, puis ajouter de la rue de la sélection à travers
addToBackStack(null)
de sorte que vous aurezAreaSelection
fragment dessous.Si vous ne voulez pas d'avoir une activité distincte pour cela, pour une raison quelconque, vous pouvez ajouter une boîte de dialogue de l'écouteur de votre dialogfragment et son réalisateur de (l'activité) va ouvrir la
AreaFragment
. Avec une compréhension de base de votre code ce simple projet devrait le faire:L'activité propriétaire:
AreaSelectionFragment (l'étendre à vos besoins):
Et
StreetSelectionFragment
(encore une fois: l'étendre à vos besoins):OriginalL'auteur gunar
La meilleure façon de gérer le comportement d'un
DialogFragment
serait de ne pas jouer avec ça et le laisser tel qu'il est, à repenser dans le processus de votre approche. Si je vais voir une boîte de dialogue dans une application et je suis frappé en arrière, je m'attends à à la pop la boîte de dialogue de l'écran et pas naviguer entre la boîte de dialogue pages de(j'espère que j'ai pas mal lu votre question).Dans votre
DialogFragment
vous pouvez utiliser un customDialog
(je suis en supposant que vous êtes juste en utilisant leonCreateDialog()
de rappel pour revenir à laDialog
avec les listes pour lesquelles vous remplacer leonKeyDown()
callback pour gérer le retour d'être pressé:Vous pouvez toujours faire une
Activity
ressembler à unDialog
.OriginalL'auteur Luksprog
OriginalL'auteur prince_sachdeva