DialogFragment로 대화상자 표시

DialogFragment대화상자를 만들고 호스팅하도록 설계된 특수 프래그먼트 서브클래스입니다. Kubernetes에서 프래그먼트 내에서 대화상자를 호스팅합니다. 이렇게 하면 FragmentManager 상태 관리 구성 변경 시 대화상자를 자동으로 복원합니다. 확인할 수 있습니다

DialogFragment 만들기

DialogFragment를 만들려면 다음을 확장하는 클래스를 만듭니다. DialogFragment 및 재정의하다 onCreateDialog(), 다음 예와 같이 됩니다.

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

자바

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() 드림 일반 프래그먼트 onCreateDialog()에 루트 View를 생성합니다. 는 Dialog를 만들어 DialogFragment에 포함되어 있습니다. DialogFragment는 프래그먼트의 수명 주기에서 적절한 상태로 Dialog를 표시하도록 처리합니다.

onCreateView()와 마찬가지로 Dialog의 모든 서브클래스를 반환할 수 있습니다. onCreateDialog()에서 시작하며 AlertDialog

DialogFragment 표시

FragmentTransaction를 직접 만들지 않아도 DialogFragment를 표시합니다. 대신 show() 메서드를 사용하여 대화상자를 표시할 수 있습니다. 또한 FragmentManagerString에 관한 참조를 FragmentTransaction 태그로 사용하도록 전달할 수 있습니다.

생성 시 Fragment 내에서 DialogFragment를 반환하려면 프래그먼트의 상태가 제대로 복원되도록 하위 FragmentManager 변경할 수 있습니다 null이 아닌 태그를 사용하면 findFragmentByTag(): 나중에 DialogFragment를 가져옵니다.

Kotlin

// From another Fragment or Activity where you wish to show this
// PurchaseConfirmationDialogFragment.
PurchaseConfirmationDialogFragment().show(
     childFragmentManager, PurchaseConfirmationDialog.TAG)

자바

// From another Fragment or Activity where you wish to show this
// PurchaseConfirmationDialogFragment.
new PurchaseConfirmationDialogFragment().show(
       getChildFragmentManager(), PurchaseConfirmationDialog.TAG);

FragmentTransaction을 더 세부적으로 제어하려면 기존 FragmentTransaction을 허용하는 show() 오버로드를 사용하면 됩니다.

DialogFragment 수명 주기

DialogFragment는 표준 프래그먼트 수명 주기를 따릅니다. 수명 주기 콜백이 몇 가지 추가로 제공됩니다 가장 일반적인 콜백은 다음과 같습니다.

  • onCreateDialog(): 이 콜백을 재정의하여 프래그먼트가 다음을 실행할 Dialog를 제공합니다. 관리할 수 있습니다
  • onDismiss(): 코드가 호출될 때 맞춤 로직을 수행해야 하는 경우 이 콜백을 리소스 해제 또는 구독 취소와 같이 Dialog가 닫힘 모델을 학습시키는 작업도 반복해야 합니다
  • onCancel(): 콜백이 호출될 때 맞춤 로직을 수행해야 하는 경우 이 콜백을 Dialog이(가) 취소되었습니다.

DialogFragment에는 취소 가능성을 닫거나 설정하는 메서드도 포함되어 있습니다. DialogFragment:

  • dismiss(): 프래그먼트와 그 대화상자를 닫습니다. 프래그먼트가 백 스택, 이 항목을 포함한 모든 백 스택 상태가 팝됩니다. 그 외의 경우에는 프래그먼트 삭제를 위해 새 트랜잭션이 커밋됩니다.
  • setCancelable(): 표시된 Dialog의 취소 가능 여부를 제어합니다. 이 방법 사용 사용하는 대신에 Dialog.setCancelable(boolean)

재정의하지 않음 onCreateView() 드림 또는 onViewCreated() Dialog와 함께 DialogFragment를 사용하는 경우 대화상자는 단지 자체 창이 있습니다. 따라서 자체 IP 주소를 onCreateView() 게다가 onCreateView()를 재정의하고 null이 아닌 뷰를 제공하지 않는 한, 맞춤 DialogFragment에서 onViewCreated()가 호출되지 않습니다.

맞춤 보기 사용

DialogFragment를 만들고 다음을 재정의하여 대화상자를 표시할 수 있습니다. onCreateView() 일반적인 프래그먼트와 마찬가지로 layoutId를 제공하거나 DialogFragment 생성자.

onCreateView()에서 반환한 View 대화상자에 자동으로 추가됩니다. 즉, 비어 있는 기본 대화상자가 뷰로 채워지므로 대부분의 경우 onCreateDialog()를 재정의할 필요가 없습니다.

DialogFragment의 특정 서브클래스(예: BottomSheetDialogFragment)는 하단 시트로 스타일이 지정된 대화상자에 뷰를 삽입합니다.