DialogFragment ile iletişim kutularını göster

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 bir Dialog 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österilen Dialog için iptal edilebilir olup olmadığını kontrol edin. Doğrudan Dialog.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.