DialogFragment
, iletişim kutuları oluşturmak ve barındırmak için tasarlanmış özel bir parça alt sınıfıdır. İletişim kutunuzu bir parça içinde barındırmanız gerekmese de, bu işlemi yaptığınızda FragmentManager
iletişim kutusunun durumunu yönetebilir ve yapılandırma değişikliği olduğunda iletişim kutusunu otomatik olarak geri yükleyebilir.
DialogFragment Oluşturma
Bir DialogFragment
oluşturmak için aşağıdaki örnekte gösterildiği gibi DialogFragment
öğesini genişleten ve onCreateDialog()
özelliğini geçersiz kılan bir sınıf oluşturun.
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"; }
onCreateView()
işlevinin normal bir parçada kök View
oluşturmasına benzer şekilde, onCreateDialog()
DialogFragment
öğesinin bir parçası olarak görüntülenecek bir Dialog
oluşturur. DialogFragment
, parçanın yaşam döngüsündeki uygun durumlarda Dialog
değerini görüntülemeyi işler.
onCreateView()
ile olduğu gibi, onCreateDialog()
öğesinden herhangi bir Dialog
alt sınıfını döndürebilirsiniz ve AlertDialog
kullanımıyla sınırlı değildir.
İletişim Kutusunu Göster
DialogFragment
göstermek için manuel olarak FragmentTransaction
oluşturmanız gerekmez. Bunun yerine, iletişim kutunuzu görüntülemek için show()
yöntemini kullanın. FragmentTransaction
etiketi olarak kullanmak üzere FragmentManager
ve String
öğelerine bir referans aktarabilirsiniz.
Fragment
içinden bir DialogFragment
oluştururken parçanın alt FragmentManager
öğesini kullanın. Böylece, yapılandırma değişikliklerinden sonra durum düzgün bir şekilde geri yüklenir. Boş olmayan bir etiket, DialogFragment
öğesini daha sonra almak için findFragmentByTag()
kullanmanızı sağlar.
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);
FragmentTransaction
üzerinde daha fazla kontrol sahibi olmak için mevcut bir FragmentTransaction
öğesini kabul eden show()
aşırı yüklemesini kullanabilirsiniz.
DialogFragment yaşam döngüsü
DialogFragment
, birkaç ek yaşam döngüsü geri çağırmasıyla standart parça yaşam döngüsünü izler. En yaygın olanları şunlardır:
onCreateDialog()
: Parçanın yönetilip görüntülemesi için birDialog
sağlamak amacıyla bu geri çağırmayı geçersiz kılın.onDismiss()
:Dialog
ürününüz kapatıldığında kaynakları serbest bırakma veya gözlemlenebilir kaynakların aboneliğinden çıkma gibi özel bir mantık gerçekleştirmeniz gerekiyorsa bu geri çağırmayı geçersiz kılın.onCancel()
:Dialog
iptal edildiğinde herhangi bir özel mantık gerçekleştirmeniz gerekirse bu geri çağırmayı geçersiz kılın.
DialogFragment
, DialogFragment
kapsamındaki iptal etme veya iptal edilebilirlik ayarlarını yapma yöntemlerini de içerir:
dismiss()
: Parçayı ve iletişim kutusunu kapatır. Parça, arka yığına eklendiyse bu girişe kadar olan ve bu girişle birlikte tüm arka yığın durumları ortaya çıkar. Aksi takdirde, parçayı kaldırmak için yeni bir işlem yapılır.setCancelable()
: GösterilenDialog
için iptal edilebilir olup olmadığını kontrol edin. DoğrudanDialog.setCancelable(boolean)
çağırmak yerine bu yöntemi kullanın.
Dialog
ile DialogFragment
kullanırken onCreateView()
veya onViewCreated()
öğelerini geçersiz kılmazsınız. Diyaloglar sadece bir görünüm
değildir, kendi pencereleri vardır. Dolayısıyla, onCreateView()
değerini geçersiz kılmak yeterli değildir. Ayrıca onViewCreated()
, onCreateView()
geçersiz kılınmadığı ve boş olmayan bir görünüm sağlanmadığı sürece özel bir DialogFragment
üzerinde hiçbir zaman çağrılmaz.
Özel görünümleri kullanma
onCreateView()
değerini geçersiz kılarak bir DialogFragment
oluşturabilir ve iletişim kutusu görüntüleyebilirsiniz.
Tipik bir parçada olduğu gibi layoutId
verebilir veya DialogFragment
kurucusunu kullanabilirsiniz.
onCreateView()
tarafından döndürülen View
otomatik olarak iletişim kutusuna eklenir. Çoğu durumda bu, varsayılan boş iletişim kutusu görünümünüzle doldurulduğundan onCreateDialog()
değerini geçersiz kılmanız gerekmediği anlamına gelir.
Belirli DialogFragment
alt sınıfları (ör. BottomSheetDialogFragment
), görünümünüzü alt sayfa olarak stillendirilmiş bir iletişim kutusuna yerleştirir.