태그 보관물: android-fragments

android-fragments

Fragment에서 onCreateView와 onViewCreated의 차이점 view View v

이 두 가지 방법의 근본적인 차이점은 무엇입니까? TextView를 만들 때 성능을 위해 다른 하나를 사용해야합니까?

편집 : 차이점은 무엇입니까

onCreateView() {
  root = some view
  View v = new View(some context);
  root.add(v);
  return root;
}


onViewCreated() {
  View v = new View(some context);
  getView().add(v);
}



답변

에서 뷰를 초기화하는 동안 충돌이 발생 onCreateView합니다.

에서 레이아웃을 확장 onCreateView해야하지만 findViewByIdin을 사용하여 다른 뷰를 초기화해서는 안됩니다 onCreateView.

때때로 뷰가 제대로 초기화되지 않기 때문입니다. 따라서 항상 findViewByIdin onViewCreated(뷰가 완전히 생성 된 경우)을 사용하고 뷰를 매개 변수로 전달합니다.

onViewCreated 뷰가 완전히 생성되었는지 확인하는 것입니다.

onViewCreated 안드로이드 문서

onCreateView( android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle)가 반환 된 직후 , 저장된 상태가 뷰로 복원되기 전에 호출 됩니다. 이렇게하면 뷰 계층 구조가 완전히 생성되었음을 알게되면 하위 클래스가 스스로 초기화 할 수 있습니다. 그러나 조각의 뷰 계층은이 시점에서 부모에 연결되지 않습니다.


답변

onViewCreatedonCreateView(초기화하고을 포함하여 모든 객체를 만드는 메서드) 직후에 호출 TextView되므로 성능 문제가 아닙니다.

개발자 사이트에서 :

onViewCreated (보기보기, savedInstanceState 번들)

onCreateView (LayoutInflater, ViewGroup, Bundle)가 반환 된 직후, 저장된 상태가 뷰에 복원되기 전에 호출됩니다. 이렇게하면 뷰 계층 구조가 완전히 생성되었음을 알게되면 하위 클래스가 스스로 초기화 할 수 있습니다. 그러나 조각의 뷰 계층은이 시점에서 부모에 연결되지 않습니다.

출처 : Fragment # onViewCreated


답변

의 필드에 하위 뷰를 할당하는 것이 좋습니다 onViewCreated. 이는 프레임 워크가 자동 null 검사를 수행하여 Fragment의 뷰 계층이 제대로 생성되고 확장되었는지 (XML 레이아웃 파일을 사용하는 경우) 확인하기 때문입니다.

코드 조각 출처 : FragmentManger.java

// This calls onCreateView()
f.mView = f.performCreateView(f.getLayoutInflater(f.mSavedFragmentState), null, f.mSavedFragmentState);

// Null check avoids possible NPEs in onViewCreated
// It's also safe to call getView() during or after onViewCreated()
if (f.mView != null) {
    f.mView.setSaveFromParentEnabled(false);
    if (f.mHidden) f.mView.setVisibility(View.GONE);
    f.onViewCreated(f.mView, f.mSavedFragmentState);
}


답변

onCreateView팽창 된 뷰를 반환합니다. OnViewCreated바로 후에 호출 onCreateView되고 get은 부풀린 뷰에 매개 변수를 갖습니다. 반환 유형은 다음과 같습니다.void


답변

onCreateView()onCreate()활동에 해당하는 조각이며 보기를 만드는 동안 실행됩니다 . 보기가 생성 된
onViewCreated() 실행됩니다 .

should I use one over the other for performance? 아니 . 성능 향상의 증거가 없습니다.

실제로 onCreate()Fragments에도 메서드가 있지만 거의 사용 되지 않습니다 ( 사용하지도 않고 좋은 사용 사례도 찾지 못함).

나는 항상 onCreateView()Fragments에서 onCreate().
그리고 나는 그것에 만족합니다.


답변

현재 문서Fragment.onCreateView() 는 다음과 같습니다.

이 메서드에서 레이아웃 만 확장하고 반환 된 View에서 작동하는 로직을 onViewCreated (View, Bundle)로 이동하는 것이 좋습니다.

이유를 이해할 필요가 없습니다. 문서가 말한대로해야하지만이 추천이 존재하는 이유를 아는 것은 흥미로울 것입니다. 내 최선의 추측은 관심사 분리 이지만 IMHO 이것은 필요 이상으로 조금 더 복잡하게 만듭니다.


답변

내가 사용하는 주된 이유 onViewCreated는 .NET Framework에 있어야하는 뷰 계층 구조 인플레이션 / 생성 논리에서 초기화 논리를 분리하기 때문 onViewCreate입니다. 다른 모든 성능 특성은 동일하게 보입니다.