DialogFragment
to
specjalna podklasa fragmentów przeznaczona do tworzenia i hostowania
okna dialogowe. Chociaż nie trzeba
hostuj okno dialogowe we fragmencie, dzięki czemu
FragmentManager
– zarządzanie stanem
i automatycznie przywróć to okno, gdy konfiguracja
gdy następuje zmiana.
Utwórz fragment DialogFragment
Aby utworzyć klasę DialogFragment
, utwórz zajęcia, które rozszerzają się
DialogFragment
i
zastąpić
onCreateDialog()
,
jak w poniższym przykładzie.
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"; }
Podobne do tego, jak to zrobić
onCreateView()
tworzy pierwiastek View
we fragmencie zwykłym, onCreateDialog()
tworzy Dialog
do wyświetlenia
w ramach DialogFragment
. Uchwyty DialogFragment
do wyświetlania
Dialog
w odpowiednich stanach cyklu życia fragmentu.
Tak jak w przypadku onCreateView()
, możesz zwrócić dowolną podklasę klasy Dialog
od onCreateDialog()
i nie są ograniczone do używania
AlertDialog
Pokaż fragment DialogFragment
Nie musisz ręcznie tworzyć FragmentTransaction
, aby
wyświetli DialogFragment
. Zamiast tego użyj metody show()
do
wyświetlić okno. Możesz przekazać odwołanie do FragmentManager
i String
, które będą używane jako tag FragmentTransaction
.
Podczas tworzenia
DialogFragment
z zakresu Fragment
, użyj parametru
element podrzędny FragmentManager
, aby stan został prawidłowo przywrócony
po zmianie konfiguracji. Tag o wartości niepustej umożliwia korzystanie z
findFragmentByTag()
, aby pobrać DialogFragment
później.
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);
Większą kontrolę nad
FragmentTransaction
możesz użyć funkcji
show()
przeciążenie, które akceptuje istniejący element FragmentTransaction
.
Cykl życia DialogFragment
DialogFragment
podlega standardowym cyklowi życia fragmentów,
z kilkoma dodatkowymi wywołaniami zwrotnymi w cyklu życia. Najbardziej
są następujące:
onCreateDialog()
: zastąp to wywołanie zwrotne, aby podaćDialog
dla fragmentu do zarządzania i wyświetlania.onDismiss()
: zastąp to wywołanie zwrotne, jeśli chcesz wykonać niestandardową logikę podczas usługaDialog
została zamknięta, np. zwalnianie zasobów lub rezygnacja z subskrypcji z obserwowalnych zasobów.onCancel()
: zastąp to wywołanie zwrotne, jeśli chcesz wykonać niestandardową logikę podczas WydarzenieDialog
zostało anulowane.
DialogFragment
zawiera też metody odrzucania lub ustawiania możliwości anulowania
z DialogFragment
:
dismiss()
: zamknij fragment i jego okno dialogowe. Jeśli fragment został dodany do sekcji wszystkie stany stosu wstecznego do tego wpisu włącznie z tym wpisem. W przeciwnym razie nowa transakcja ma na celu usunięcie fragmentu.setCancelable()
: określają, czy wyświetlenieDialog
ma możliwość anulowania. Użyj tej metody zamiast dzwonić bezpośrednioDialog.setCancelable(boolean)
Nie zastępujesz
onCreateView()
lub
onViewCreated()
w przypadku używania DialogFragment
z Dialog
. Okna to nie tylko
mają własne okno. W związku z tym nie wystarczy zastąpić
onCreateView()
Poza tym funkcja onViewCreated()
nigdy nie jest wywoływana dla
niestandardowy DialogFragment
, chyba że zastąpisz onCreateView()
i
zapewnił widok o wartości niezerowej.
Korzystanie z widoków niestandardowych
Możesz utworzyć DialogFragment
i wyświetlić okno, zastępując
onCreateView()
Możesz dać mu layoutId
, jak w przypadku typowego fragmentu, lub użyć funkcji
Konstruktor DialogFragment
.
Kwota View
zwrócona przez: onCreateView()
zostanie automatycznie dodany do tego okna. W większości przypadków oznacza to,
nie trzeba zastępować
onCreateDialog()
ponieważ domyślne puste okno zawiera Twój widok.
Niektóre podklasy klasy DialogFragment
, takie jak
BottomSheetDialogFragment
,
umieścić widok w oknie, które ma styl planszy dolnej.