2013-03-07 2 views
15

ViewPager에서 사용할 수 있도록 모든 액티비티를 조각으로 변환 중입니다.Android : 활동의 onCreate() 코드를 조각에 넣을 위치는 어디입니까?

나는 이것을 찾으려고했지만 나는 만족할만한 대답을 찾을 수 없었다. 그래서 나는 여기서 그것을 묻고있다.

내 액티비티에서는 onCreate() 메서드로 코드를 작성했습니다. 일부 XML 버튼을 내 Activity에 연결하기 위해 예를 들어 findViewById()이라고 부릅니다. 또한 onCreate()에서 일부보기를 보이지 않게 설정하고 OnClickListener()으로 설정하고 TextView을 텍스트로 채우고 onCreate() 방법으로 알림을 모두 제거합니다.

제 질문은 어디에서이 코드를 조각에 넣어야합니까? onCreate()에서? onCreateView()? onActivityCreated()? 그리고 왜?

미리 감사드립니다.

답변

19

, 거기에 약간의 교육적 가치가있다. 게다가, 그의 2 번째 진술에 더 적절한 선택이있다.

어디에서이 코드를 조각에 넣어야합니까? onCreate()에서? onCreateView()? ? onActivityCreated()? 그리고 왜?

짧은 대답은 onCreateView() 또는 onActivityCreated() 중 하나입니다. 뷰 계층 구조는 onCreateView()까지 생성되지 않으므로 뷰를 부 풀리거나 클릭 리스너 등을 첨부 할 수있는 조각의 수명주기에서 가장 이른 시점이됩니다. Since onActivityCreated() will always be run after onCreateView(), 이는 적절한 위치이기도합니다. onCreate()은 일시적으로 조각을 분리하고 다시 부착하는 시스템을 위해 건너 뛸 수 있습니다 (예 : retaining fragments.

Pragnani는 조각의보기를 부 풀리는 것이 활동에서보기를 부 풀리는 것과 약간 다릅니다. 더 구체적으로 말하자면, 조각은 findViewById() 메서드를 정의하지 않으므로 다른 객체에서이 메서드를 호출해야합니다.

getActivity().findViewById()을 사용하는 대신 getView().findViewById()이 필요합니다. 그 이유는 뷰 룩업을 위해 액티비티를 사용하면 동일한 뷰 ID를 가진 여러 조각이 연결된 경우 문제가 발생하기 때문입니다. 다양한 조각의 레이아웃에서보기 ID를 다시 사용하거나 다른 데이터를 표시하는 두 개의 동일한 단편을 표시하는 경우에도 마찬가지입니다. 두 경우 모두 첫 번째 일치 항목 만 반환됩니다. 반면에 뷰를 실제로 조각의 컨텍스트에서 조회해야합니다. 정확히 getView()이 반환하는 부분의 루트보기 (onCreateView()에 반환 됨)이므로 조회 범위가 적절하게 제한됩니다.

+0

답변을 많이 보내 주셔서 감사합니다. 이것은 내가 필요한 excactly입니다! – Xander

+0

'onCreateView()'에서'getView()'를 호출 할 수 없으므로 NullPointerException이 발생합니다. – Xander

+0

맞습니다.'onCreateView()'가 반환 될 때까지 getView()가 설정되지 않습니다. 더 명백하다. 그러나, 당신은'onCreateView()'에서 루트 뷰를 팽창시키고 있기 때문에,'getView()'를 호출 할 필요는 없다. 대신에 당신이 결국 리턴하는 뷰에서'findViewById()'를 직접 호출한다. 예를 들어 : ['CountingFragment'] (http://developer.android.com/reference/android/app/Fragment.html#BackStack)를 참조하십시오. –

3

1. 왼쪽 빈에서 onCreate 그냥 전화 super.onCreate() 대신 findViewById를()의

2. 이 getActivity()를 사용합니다. findViewById를() 항상 getActivity()를 사용하면 문맥을 필요로하는 곳에 보기의. Pragnani의 대답은 가까이 있지만

Do all other operations in onCreateview() 
+0

이 문서의 내용과 완전히 반대 https://github.com/thecodepath/android_guides/wiki/Creating-and-Using-Fragments는 – tsil

관련 문제