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()
메서드를 사용하여 대화상자를 표시할 수 있습니다. 또한 FragmentManager
및 String
에 관한 참조를 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
)는 하단 시트로 스타일이 지정된 대화상자에 뷰를 삽입합니다.