Какво трябва да прави onCreate в DialogFragment?

В момента се забърквам с DialogFragment, за да се науча да го използвам. Предположих, че в сравнение с onCreateView(), onCreate() може да направи това:

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

Но греша. Не знам защо не работи. Грешката изчезва, когато коментирам 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;
}

person Andy    schedule 15.06.2012    source източник


Отговори (3)


testTextView НЕ сочи към никакъв обект, така че опитайте нещо подобно

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

РЕДАКТИРАНЕ:

Ако видите жизнения цикъл на фрагмент, той казва, че onCreateView се извиква след onCreate следователно вашият onCreate няма препратка към вашия обект, тоест текстов изглед във вашето оформление

person Sana    schedule 15.06.2012
comment
Имам един бърз въпрос, който докторът не казва. В DialogFragments трябва ли да използвам onAttach()? И ще го направя, освен че не ми позволява, докато не изтече определено време хаха. - person Andy; 15.06.2012
comment
ако искате, можете да използвате onAttach(), но не ви трябва във вашия случай. - person Sana; 15.06.2012
comment
onAttach трябва да се използва, за да можете да направите някои init() за вашия фрагмент, но във вашия случай това е просто оформяне на изглед и опит за получаване на препратка, което трябва да направите във вашия метод 'onCreate' - person Sana; 15.06.2012

Все още не сте използвали setContentView, така че получавате NPE за TextView.

onCreate се случва преди onCreateView. Ако искате да получите достъп до нещо от оформлението там, трябва да setContentView... което не е добра идея за DialogFragment.

Преместете тази част от кода на onCreateView след вас setContentView и ще се оправите.

За ваша справка, ето жизнения цикъл на фрагмента:

въведете описание на изображението тук

person Barak    schedule 15.06.2012
comment
ааа Тъй като тук имате тази страхотна диаграма, бих могъл да попитам, onAttach(), трябва ли да я използвам на DialogFragment? - person Andy; 15.06.2012
comment
Честно казано, никога не съм използвал onAttach, така че наистина не знам... Опитвам се да мисля за какво бихте могли да го използвате... очевидно нищо, свързано с потребителския интерфейс. :) - person Barak; 15.06.2012
comment
хаха Наистина. Беше любопитен, покриваше всички основни неща. Не изглежда, че някой го използва в уроци. Чудех се защо. Благодаря. - person Andy; 15.06.2012
comment
OnAttach() обикновено се използва за прикачване на слушатели към родителската дейност. - person Warpzit; 18.06.2012

Инициализирахте ли testTextView в onCreateView? Трябва да използвате LayoutInflater в onCreateView, за да получите оформлението и след това вие трябва да получите достъп до TextView чрез findViewById.

person Tim    schedule 15.06.2012
comment
Да сър. Направи това. Ще публикувам този код. Както можете да видите, грешката е странна, тъй като предполагам, че мога setText - person Andy; 15.06.2012
comment
Изобщо не е странно, тъй като onCreateView се появява след onCreate. - person Barak; 15.06.2012