조각에서 onCreate (), onCreateView () 및 onActivityCreated ()의 차이점 및 사용


329

의 차이점은 무엇입니까 onCreate(), onCreateView()그리고 onActivityCreated()그들 각각에 사용되는 조각과 무슨 일이?



@BradLarson 왜 이것이 닫혔는지 이해할 수 없습니다. 비교적 인기있는 질문으로 판명되었으며 귀하의 의견에 명시된 링크와 다릅니다. 이 질문은 세 가지 방법의 차이점과 서로 비교하는 방법을 요구하지만 의견에 링크 한 질문은 이러한 방법 중 두 가지만 언급합니다.
Farbod Salamat-Zadeh

@BradLarson 공정하고 충분히 발견되었습니다. 이제 이해가되었지만 세 가지 방법을 더 잘 비교하여 추가 세부 사항에 대한 링크를 참조하는 답변을 작성할 수 없습니까?
Farbod Salamat-Zadeh

2
@ FarbodSalamat-Zadeh-물론입니다. 더 나은 답변을 제공 할 수 있다고 생각되면 질문을 다시 열었습니다. 나는 할 수만 있다면 대답하지 않은 채로두고 싶지 않았습니다.
Brad Larson

답변:


394

onCreate () :

onCreate()A의 방법이 Fragment있다 후에 호출 ActivityonAttachFragment() 하지만 그 전에 FragmentonCreateView().
이 방법에서는 변수를 할당하고, Intent엑스트라를 가져 오고 , View 계층 구조와 관련이없는 다른 것 (예 : 비 그래픽 초기화)을 수행 할 수 있습니다. 이 방법은 때 호출 할 수 있기 때문이다 Activity의이 onCreate()완료되지 않습니다, 그래서 충돌이 발생할 수 있습니다 여기에보기 계층 구조에 액세스하려고합니다.

onCreateView () :

이 후 onCreate()합니다 (에서 호출 Fragment)의 Fragment'들 onCreateView()이라고합니다. View변수 를 할당 하고 그래픽 초기화를 수행 할 수 있습니다 . View이 메소드에서 를 반환해야 하며 이것이 기본 UI보기이지만 Fragment레이아웃이나 그래픽을 사용하지 않는 경우 반환 할 수 있습니다 null(재정의하지 않으면 기본적으로 발생 함).

onActivityCreated () :

이름 상태로,이되는 애프터라고 Activity의가 onCreate()완료되었습니다 . after로 호출 onCreateView()되며 주로 최종 초기화 (예 : UI 요소 수정)에 사용됩니다.


요약하자면 ...
... 모두 호출 Fragment되었지만 다른 시간에 호출됩니다.
onCreate()아닌 그래픽 초기화를 해주고하기 위해, 먼저 호출된다. 다음 View으로 사용할 변수를 할당하고 선언 할 수 있습니다 onCreateView(). 그런 다음 onActivityCreated()모든 것이 완료되면 원하는 최종 초기화를 수행하는 데 사용하십시오 .


당신이 공식 안드로이드 문서를 보려는 경우, 여기에서 찾을 수 있습니다 :
- - -onCreate()
onCreateView()
onActivityCreated()

스택 오버플로에 대해서는 약간 다르지만 덜 발달 된 질문 / 답변이 있습니다.


6
화면이 회전 할 때 다시 호출되지 않도록 onCreate ()에서 그래픽이 아닌 초기화를 구현할 것이라고 생각했습니다. fragment.setRetainInstance (true)를 호출해야한다는 것이 밝혀졌습니다. 그렇지 않으면 화면이 회전 할 때 onCreate () 및 onCreateView ()가 다시 호출됩니다.
젠장 야채

onCreateView ()에서 뷰 계층 구조에 액세스하는 것이 안전합니까?
Cody

@Cody 저는 뷰 계층에 액세스하는 것이 정확한 목적이라고 생각 onCreateView합니다.
Farbod Salamat-Zadeh

1
그러나 onActivityCreated ()? 뷰 계층 구조에 액세스 할 때 onCreateView에서 충돌이 발생할 가능성이 있습니까? onCreateView () / onActivityCreated ()의 차이점이 무엇인지 잘 모르겠습니다.
Cody

1
주목해야 할 한 가지는 (적어도 AppCompatActivity에서) 활동이 다시 작성 될 때 (예 : 최소화 및 종료 후) onCreate () 및 super.onCreate () 활동이 완료되기 전에 onCreate () 조각이 호출된다는 것입니다. 단검과 같은 것을 사용하고 주입되는 부모 활동에서 무언가에 액세스 해야하는 경우 문제가 될 수 있습니다. 이에 대한 한 가지 해결책은 항상 onCreate () 호출되는 onActivityCreated () 코드를 호출하는 것입니다.
Nicholas

144

간결하고 그림 같은 답을 찾는 사람은

여기에 이미지 설명을 입력하십시오 https://hanaskuliah.wordpress.com/2015/12/07/android-5-development-part-6-fragment/


과,

여기에 이미지 설명을 입력하십시오


21
동의했다. Comic Sans는 이와 같은 것들에 필요합니다
Kartik Chugh

1
같은 다이어그램에 3 가지의 다른 글꼴을 처음으로 보았고, 이제 내 인생이 이제는 완성 된 느낌입니다.
Gil Sand

언제 프래그먼트를 정확하게 다시 시작할 수 있습니까?
Saurabh

1
프로세스가 종료되면 프래그먼트가 어떻게 다시 만들어지지 않습니까? AFAIK, 작업 상태 만 번들로 유지되고 다시 생성되어 앱이 다시 포 그라운드로 표시됩니다.
stdout

6

onActivityCreated ()-더 이상 사용되지 않습니다

onActivityCreated()이제 조각 버전 1.3.0-alpha02 로 더 이상 사용되지 않습니다.

onActivityCreated () 메소드는 더 이상 사용되지 않습니다. 프래그먼트의 뷰를 터치하는 코드는 onViewCreated () (onActivityCreated () 직전에 호출 됨)에서 수행해야하며 다른 초기화 코드는 onCreate ()에 있어야합니다. 활동의 onCreate ()가 완료 될 때 특히 콜백을 수신하려면 LifeCycleObserver가 onAttach ()의 활동 라이프 사이클에 등록되고 onCreate () 콜백이 수신되면 제거되어야합니다.

자세한 정보는 여기 에서 찾을 수 있습니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.