프래그먼트를 생성할 때 기본 생성자만 사용하는 것이 권장되는 이유는 무엇입니까?

3505 단어 android
저는 Amit Shekhar , 개발자들이 고임금 기술직을 구하도록 돕는 멘토입니다.

오늘 이 블로그에서는 Android 인터뷰 질문에 대해 논의할 것입니다.

질문: 프래그먼트를 생성할 때 기본 생성자만 사용하는 것이 권장되는 이유는 무엇입니까?

Android 인터뷰에서 자주 묻는 질문 중 하나입니다.

이 문서는 원래 amitshekhar.me에 게시되었습니다.

답을 토론해 봅시다.

따라서 방향이 변경되는 경우와 같이 Android 프레임워크가 Fragment를 재생성하기로 결정할 때마다. Android는 Fragment의 인수 없는 생성자를 호출합니다.

인수로 생성자를 호출할 수 없는 이유는 Android 프레임워크가 우리가 생성한 생성자가 무엇인지 모르기 때문입니다. 그래서 할 수 없습니다.

Fragment의 newInstance를 만드는 권장 방법을 살펴보겠습니다.

코드는 다음과 같습니다.

private const val EXTRA_PDF_ID = "EXTRA_PDF_ID"

fun newInstance(pdfID: Long): PdfFragment {
    val fragment = PdfFragment()
    val bundle = Bundle()
    bundle.putLong(EXTRA_PDF_ID, pdfID)
    fragment.arguments = bundle
    return fragment
}


여기서 이 setArguments 방법이 매우 중요합니다.

 fragment.arguments = bundle


Bundle 내부에 전달하고 있음을 알아야 합니다. 따라서 이 방법newInstance을 사용하여 인스턴스를 처음 생성할 때. Android 프레임워크는 번들을 추출하여 저장할 수 있습니다.

따라서 Orientation이 변경되는 경우 Android Framework는 인수 없는 생성자를 사용하여 새 프래그먼트를 다시 생성하고 이전에 번들을 저장했기 때문에 번들을 프래그먼트에 연결할 수 있습니다.

그리고 나중에 다시 onCreate()를 이렇게 사용하여 getArguments() 메서드에서 해당 데이터에 액세스할 수 있습니다.

val pdfID = arguments?.getLong(EXTRA_PDF_ID)


즉, 시스템이 프래그먼트를 복원할 때 자동으로 번들을 복원합니다. 그리고 우리는 프래그먼트가 초기화되었던 것과 동일한 상태로 프래그먼트의 상태를 복원할 수 있을 것입니다.

이제 기본 생성자만 사용하여 Fragment를 생성하는 것이 권장되는 이유는 무엇입니까?

지금은 그게 다입니다.

감사

Amit Shekhar

다음에서 나와 연결할 수 있습니다.


  • GitHub
  • Facebook
  • 좋은 웹페이지 즐겨찾기