Ich habe einige Fragmente, die einen regelmäßigen Dialog anzeigen müssen. In diesen Dialogen kann der Benutzer eine Ja / Nein-Antwort auswählen, und dann sollte sich das Fragment entsprechend verhalten.
Jetzt hat die Fragment
Klasse keine onCreateDialog()
Methode zum Überschreiben, also muss ich die Dialoge wohl draußen im enthaltenen implementieren Activity
. Es ist in Ordnung, aber dann Activity
muss die gewählte Antwort irgendwie an das Fragment zurückgemeldet werden. Ich könnte hier natürlich ein Rückrufmuster verwenden, so dass sich das Fragment Activity
bei einer Listener-Klasse registriert und die Aktivität die Antwort darüber oder so etwas zurückmeldet.
Dies scheint jedoch ein ziemliches Durcheinander für eine einfache Aufgabe zu sein, da ein "einfacher" Ja-Nein-Dialog in einem Fragment angezeigt wird. Auch auf diese Weise Fragment
wäre ich weniger in sich geschlossen.
Gibt es einen saubereren Weg, dies zu tun?
Bearbeiten:
Die Antwort auf diese Frage erklärt nicht wirklich im Detail, wie man DialogFragments verwenden sollte, um Dialoge aus Fragmenten anzuzeigen. Also AFAIK, der Weg ist:
- Ein Fragment anzeigen.
- Instanziieren Sie bei Bedarf ein DialogFragment.
- Legen Sie das ursprüngliche Fragment als Ziel dieses DialogFragments fest
.setTargetFragment()
. - Zeigen Sie das DialogFragment mit .show () aus dem Originalfragment an.
- Wenn der Benutzer eine Option in diesem Dialogfeld auswählt, benachrichtigen Sie das ursprüngliche Fragment über diese Auswahl (z. B. hat der Benutzer auf "Ja" geklickt). Mit .getTarget () können Sie die Referenz des ursprünglichen Fragments abrufen.
- Schließen Sie das DialogFragment.
quelle
Antworten:
Sie sollten stattdessen ein DialogFragment verwenden.
quelle
Activity
vollständig vermeiden, indem Sie die MethodenputFragment
undgetFragment
verwendenFragmentManager
,DialogFragment
mit denen Sie direkt an das aufrufende Fragment zurückmelden können (auch nach Änderungen der Ausrichtung).Ich muss vorsichtig an der zuvor akzeptierten Antwort zweifeln, dass die Verwendung eines DialogFragments die beste Option ist. Der beabsichtigte (primäre) Zweck des DialogFragments scheint darin zu bestehen, Fragmente anzuzeigen, die selbst Dialoge sind, und nicht Fragmente anzuzeigen, in denen Dialoge angezeigt werden sollen.
Ich glaube, dass die Verwendung der Aktivität des Fragments zur Vermittlung zwischen dem Dialog und dem Fragment die bevorzugte Option ist.
quelle
onCreateDialog
Ansatz von Managed Dialogs ( ) bald veraltet sein wird, würde ich nicht zustimmen und sagen, dass diesDialogFragment
in der Tat der richtige Weg ist.Hier ist ein vollständiges Beispiel für ein Ja / Nein-DialogFragment:
Die Klasse:
So starten Sie den Dialog:
Sie können die Klasse auch onClickListener implementieren lassen und diesen anstelle eingebetteter Listener verwenden.
Rückruf zur Aktivität
Wenn Sie einen Rückruf implementieren möchten, gehen Sie in Ihrer Aktivität folgendermaßen vor:
und
Die Rückrufklasse:
Um dann einen Rückruf von einem Fragment durchzuführen, müssen Sie sicherstellen, dass der Listener wie folgt angehängt ist:
Und ein Rückruf wird wie folgt ausgeführt:
quelle
Für mich war es das Folgende:
MyFragment:
MyDialog:
Aktivität:
DialogFragment-Layout:
Wie der Name schon
dialogfragment_heightfixhiddenbtn
sagtwrap_content
, konnte ich einfach nicht herausfinden, wie die Höhe des unteren Knopfes halbiert werden konnte, obwohl ich dies sagte . Deshalb habe ich einen versteckten Knopf hinzugefügt, um ihn stattdessen in zwei Hälften zu schneiden. Entschuldigung für den Hack.quelle
setTargetFragment()
wird vom System korrekt neu erstellt, wenn der Aktivitäts- / Fragmentsatz nach der Drehung neu gestartet wird. Die Referenz zeigt also automatisch auf das neue Ziel.public interface ShowDialog { void showDialog(DialogFragment dialogFragment); }
Dabei ist .test_dialog von XML benutzerdefiniert
quelle
Ich bin selbst Anfänger und konnte ehrlich gesagt keine zufriedenstellende Antwort finden, die ich verstehen oder umsetzen konnte.
Hier ist also ein externer Link, der mir wirklich geholfen hat, das zu erreichen, was ich wollte. Es ist sehr einfach und leicht zu folgen.
http://www.helloandroid.com/tutorials/how-display-custom-dialog-your-android-application
DAS, WAS ICH VERSUCHTE, MIT DEM CODE ZU ERREICHEN:
Ich habe eine MainActivity, die ein Fragment hostet. Ich wollte, dass über dem Layout ein Dialogfeld angezeigt wird, in dem Sie nach Benutzereingaben gefragt und die Eingabe entsprechend verarbeitet werden. Siehe einen Screenshot
So sieht die onCreateView meines Fragments aus
ich hoffe es hilft dir
Lassen Sie mich wissen, wenn es Verwirrung gibt. :) :)
quelle
quelle