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

DialogFragment, bir oluşturma ve barındırma için tasarlanmış özel parça alt sınıfı iletişim kutuları. Bir proje yöneticisine iletişim kutunuzu bir parça içinde barındırmak, FragmentManager eyaleti yönetme yapılandırıldığında iletişim kutusunu otomatik olarak geri yükler. olduğunu öğrenmiştik.

DialogFragment oluşturma

DialogFragment oluşturmak için DialogFragment ve geçersiz kılma onCreateDialog(), aşağıda gösterildiği gibidir.

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";
}

Benzer onCreateView() onCreateDialog() normal bir parçada bir kök View oluşturur görüntülenecek bir Dialog oluşturur DialogFragment kapsamındadır. DialogFragment, aşağıdakileri gösterebilir: Dialog, parçanın yaşam döngüsünde uygun durumlarda.

onCreateView() öğesinde olduğu gibi, Dialog öğesinin herhangi bir alt sınıfını döndürebilirsiniz onCreateDialog() tarafından sunulmaktadır ve kullanımla sınırlı değildir AlertDialog.

DialogFragment'ı göster

Aşağıdaki işlemler için manuel olarak FragmentTransaction oluşturmanız gerekmez: DialogFragment gösterilmelidir. Bunun yerine, show() yöntemini kullanarak iletişim kutusu görüntülenir. Bir FragmentManager öğesine referans aktarabilirsiniz ve FragmentTransaction etiketi olarak kullanılacak bir String.

Oluştururken Fragment içindeki bir DialogFragment için parçanın durumu düzgün şekilde geri yüklemek için alt FragmentManager yapılandırma değişikliklerinden sonra. Null olmayan bir etiket, DialogFragment öğesini daha sonra almak için findFragmentByTag().

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);

üzerinde daha fazla kontrol FragmentTransaction URL adresini show() mevcut bir FragmentTransaction ile aşırı yüklenme

DialogFragment yaşam döngüsü

DialogFragment, standart parça yaşam döngüsünü izler. birçok ek yaşam döngüsü geri çağırması içerir. En yaygın olanları şunlardır:

  • onCreateDialog(): parçaya bir Dialog sağlamak için bu geri çağırmayı geçersiz kılın ve görüntüleyebilirsiniz.
  • onDismiss(): aşağıdaki işlemler için özel mantık gerçekleştirmeniz gerekirse bu geri çağırmayı Dialog aboneliğiniz kapatılır (ör. kaynak serbest bırakma veya abonelikten çıkma) sağlayabilir.
  • onCancel(): Dialog iptal edildi.

DialogFragment, iptal edilebilirliği kapatma veya ayarlama yöntemleri de içerir DialogFragment için:

  • dismiss(): parçayı ve iletişim kutusunu kapatın. Parça, bu girişe kadarki tüm arka yığın durumları pop-up ile açılır. Aksi takdirde, parçayı kaldırmak için yeni bir işlem yapılır.
  • setCancelable(): gösterilen Dialog işleminin iptal edilebilir olup olmadığını kontrol eder. Bu yöntemi kullan doğrudan telefon etmek yerine Dialog.setCancelable(boolean).

Geçersiz kılmazsanız onCreateView() veya onViewCreated() (Dialog) ile DialogFragment kullanırken. İletişim kutuları kendi pencereleri vardır. Bu nedenle, onCreateView() Ayrıca, onViewCreated() hiçbir zaman özel DialogFragment, onCreateView() ve boş olmayan bir görünüm sağladı.

Özel görünümleri kullanma

Bir DialogFragment oluşturabilir ve geçersiz kılarak bir iletişim kutusu görüntüleyebilirsiniz onCreateView() Tipik bir parçada olduğu gibi bir layoutId verebilir veya DialogFragment oluşturucu.

View, onCreateView() tarafından iade edildi otomatik olarak iletişim kutusuna eklenir. Çoğu durumda bu, sizin için geçersiz kılmaya gerek yoktur onCreateDialog() Varsayılan boş iletişim kutusu görünümünüzle doldurulduğundan emin olun.

DialogFragment öğesinin belirli alt sınıfları; örneğin BottomSheetDialogFragment, görüntünüzü alt sayfa stilinde bir iletişim kutusuna yerleştirebilirsiniz.