Ein DialogFragment
ist ein
Fragment-Unterklasse, die zum Erstellen und Hosten
Dialogfelder. Auch wenn Sie sich
Ihr Dialogfeld in einem Fragment hosten,
FragmentManager
verwaltet den Status
des Dialogfelds und stellen es automatisch wieder her, wenn eine Konfiguration
erfolgt.
DialogFragment erstellen
Zum Erstellen einer DialogFragment
erstellen Sie eine Klasse, die
DialogFragment
und
überschreiben
onCreateDialog()
,
wie im folgenden Beispiel gezeigt.
Kotlin
class PurchaseConfirmationDialogFragment : DialogFragment() { override fun onCreateDialog(savedInstanceState: Bundle?): Dialog = AlertDialog.Builder(requireContext()) .setMessage(getString(R.string.order_confirmation)) .setPositiveButton(getString(R.string.ok)) { _,_ -> } .create() companion object { const val TAG = "PurchaseConfirmationDialog" } }
Java
public class PurchaseConfirmationDialogFragment extends DialogFragment { @NonNull @Override public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { return new AlertDialog.Builder(requireContext()) .setMessage(getString(R.string.order_confirmation)) .setPositiveButton(getString(R.string.ok), (dialog, which) -> {} ) .create(); } public static String TAG = "PurchaseConfirmationDialog"; }
Ähnlich wie bei
onCreateView()
erstellt einen Stamm View
in einem gewöhnlichen Fragment, onCreateDialog()
erstellt eine Dialog
zum Anzeigen
im Rahmen der DialogFragment
. Der DialogFragment
steuert die Anzeige
das Dialog
in den entsprechenden Zuständen im Lebenszyklus des Fragments.
Wie bei onCreateView()
können Sie jede abgeleitete Klasse von Dialog
zurückgeben.
onCreateDialog()
und sind nicht auf die Verwendung von
AlertDialog
DialogFragment anzeigen
Sie müssen FragmentTransaction
nicht manuell erstellen,
DialogFragment
anzeigen lassen. Verwenden Sie stattdessen die Methode show()
,
Dialogfeld anzeigen. Du kannst eine Referenz an FragmentManager
übergeben.
und ein String
zur Verwendung als FragmentTransaction
-Tag.
Beim Erstellen
ein DialogFragment
innerhalb einer Fragment
, verwenden Sie den Wert des Fragments,
Untergeordnetes FragmentManager
, damit der Status ordnungsgemäß wiederhergestellt wird
nach Konfigurationsänderungen. Mit einem Tag ungleich Null können Sie
findFragmentByTag()
, um den DialogFragment
zu einem späteren Zeitpunkt abzurufen.
Kotlin
// From another Fragment or Activity where you wish to show this // PurchaseConfirmationDialogFragment. PurchaseConfirmationDialogFragment().show( childFragmentManager, PurchaseConfirmationDialog.TAG)
Java
// From another Fragment or Activity where you wish to show this // PurchaseConfirmationDialogFragment. new PurchaseConfirmationDialogFragment().show( getChildFragmentManager(), PurchaseConfirmationDialog.TAG);
Für mehr Kontrolle über die
FragmentTransaction
,
können Sie den
show()
Überlastung, die ein vorhandenes FragmentTransaction
-Objekt akzeptiert.
DialogFragment-Lebenszyklus
Ein DialogFragment
entspricht dem Standard-Fragmentlebenszyklus,
mit einigen zusätzlichen
Lebenszyklus-Callbacks. Die meisten
sind folgende:
onCreateDialog()
: diesen Callback überschreiben, um einenDialog
für das Fragment bereitzustellen, verwalten und anzeigen lassen.onDismiss()
: überschreiben Sie diesen Callback, wenn Sie beim Ausführen einer benutzerdefinierten Logik DeineDialog
wurde geschlossen, z. B. indem du Ressourcen freigibst oder dich abmeldest aus beobachtbaren Ressourcen.onCancel()
: überschreiben Sie diesen Callback, wenn Sie beim Ausführen einer benutzerdefiniertenDialog
wurde abgesagt.
DialogFragment
enthält auch Methoden zum Schließen oder Festlegen der Annullierung
Ihrer DialogFragment
:
dismiss()
: das Fragment und sein Dialogfeld schließen. Wurde das Fragment Back-Stack-Status und alle Back-Stack-Status bis einschließlich zu diesem Eintrag werden per Pop-up entfernt. Andernfalls wird eine neue Transaktion durchgeführt, um das Fragment zu entfernen.setCancelable()
: Steuerelement, ob die angezeigteDialog
stornierbar ist. Diese Methode verwenden anstatt sie direkt anzurufen,Dialog.setCancelable(boolean)
Nicht überschreiben
onCreateView()
oder
onViewCreated()
wenn Sie DialogFragment
mit einem Dialog
verwenden. Aber Dialoge sind nicht nur
– sie haben ein eigenes Fenster. Daher reicht es nicht aus, die
onCreateView()
Außerdem wird onViewCreated()
niemals
benutzerdefinierten DialogFragment
, es sei denn, Sie haben onCreateView()
und
hat eine Ansicht ungleich Null bereitgestellt.
Benutzerdefinierte Ansichten verwenden
Sie können ein DialogFragment
erstellen und ein Dialogfeld anzeigen, indem Sie
onCreateView()
Sie können ihr entweder wie bei einem typischen Fragment layoutId
zuweisen oder die Methode
DialogFragment
-Konstruktor.
Die von onCreateView()
zurückgegebene View
wird dem Dialogfeld automatisch hinzugefügt. In den meisten Fällen bedeutet dies,
müssen keine Überschreibungen
onCreateDialog()
,
da das leere Dialogfeld standardmäßig mit Ihrer Ansicht gefüllt wird.
Bestimmte abgeleitete Klassen von DialogFragment
, z. B.
BottomSheetDialogFragment
,
Betten Sie Ihre Ansicht in ein Dialogfeld ein, das als Ansicht am unteren Rand gestaltet ist.