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ćDialogdla fragmentu do zarządzania i wyświetlania.onDismiss(): zastąp to wywołanie zwrotne, jeśli chcesz wykonać niestandardową logikę podczas usługaDialogzostał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 WydarzenieDialogzostał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świetlenieDialogma 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.