2012-06-15 2 views
1

현재 DialogFragment를 사용하는 법을 배우고 있습니다.DialogFragment에서 onCreate는 무엇을해야합니까?

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    testTextView.setText("SUCCESS!"); //ERROR HERE 
} 

하지만 내가 잘못 : 나는 onCreateView()에 비해 onCreate()이 작업을 수행 할 수 있다고 가정. 왜 작동하지 않는지 잘 모르겠습니다. 오류가 사라질 때 나는 코멘트를 낸다. testTextView.setText("Success!"); 오류는 NullPointerException이며, 문제가되는 코드 줄이있는 곳의 39 번째 줄에 플래그를 지정한다. 어떤 설명도 많이 감사합니다.

편집 :

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ 
    View testView = (View)inflater.inflate(R.layout.test_dialog_file, container, false); 
    //instantiated testTextView globally 
    testTextView = (TextView)testView.findViewById(R.id.set_text); 
    testTextView.setText("SUCCESS!"); 
    return testView; 
} 

답변

2

testTextView 그래서 뭔가를하려고 모든 개체를 가리키는되지 않습니다

testTextView = (TextView) findViewById(R.id.testTextView); 

편집 : 당신이 lifecycle of a fragment를 참조하면

, 그것은 onCreateView이라고 말한다 이후onCreate h 뒤에 onCreate에 개체에 대한 참조가 없습니다 (레이아웃의 텍스트 뷰)

+0

나는이 문서가 말을하지 않는 한 빠른 질문을해야합니까. DialogFragments에서'onAttach()'를 사용해야합니까? 그리고 나는 그것이 일정 시간이 지날 때까지 나를시키지 않는 것을 제외하고는 할 것이다. – Andy

+0

원하는 경우'onAttach()'를 사용할 수 있지만, 필요하지는 않습니다. – Sana

+0

아, 알겠습니다. 왜 안돼? – Andy

0

onCreateView에서 testTextView를 초기화 했습니까? onCreateView에서 LayoutInflater을 사용하여 레이아웃을 가져와야하고 findViewById를 통해 TextView에 액세스해야합니다.

+0

예 경. 그거 했어. 나는 그 코드를 게시 할 것이다. 보시다시피,'setText'라고 가정하면 오류가 이상합니다. – Andy

+1

** onCreate 후에 ** onCreateView가 발생하므로 전혀 이상하지 않습니다. – Barak

2

아직 setContentView을 사용하지 않으므로 TextView에 대한 NPE가 표시됩니다.

onCreateonCreateView보다 먼저 발생합니다. 레이아웃에서 무언가를보고 싶다면 setContentView ... DialogFragment는 좋지 않습니다.

setContentView 후 코드 비트를 onCreateView으로 변경하면 문제가 없습니다. 참고로

, 여기에 조각 라이프 사이클의 :

enter image description here

+0

아. 이 위대한 다이어그램을 가지고 있기 때문에, DialogFragment에'onAttach()'를 사용해야할까요? – Andy

+0

정직하게 말하면, 나는'onAttach'를 한번도 사용하지 않았습니다. 그래서 저는 정말로 모르겠지만 ... 당신이 그것을 사용하는 것에 대해 생각하고 있습니다 ... 분명히 UI는 관련이 없습니다. :) – Barak

+0

하하. 과연. 모든 기본 사항을 다루는 호기심이었습니다. 아무도 튜토리얼에서 사용하지 않는 것처럼 보입니다. 이유가 궁금합니다. 감사. – Andy

관련 문제