在DialogFragment中,onCreate应该做什么?

时间:2012-06-15 07:05:28

标签: android android-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;
}

3 个答案:

答案 0 :(得分:2)

testTextView没有指向任何对象,所以尝试像

这样的东西
testTextView = (TextView) findViewById(R.id.testTextView);

修改

如果您看到lifecycle of a fragment,则表示onCreateViewonCreate之后被称为,因此您的onCreate没有任何引用您的对象,即布局中的textview

答案 1 :(得分:2)

您尚未使用setContentView,因此您将获得TextView的NPE。

onCreate发生在onCreateView之前。如果你想从那里的布局访问某些东西,你需要setContentView ...这对于DialogFragment来说不是一个好主意。

onCreateView之后将该位代码移至setContentView,您就可以了。

供您参考,这是片段生命周期:

enter image description here

答案 2 :(得分:0)

您是否在onCreateView中初始化了testTextView?您必须在onCreateView中使用LayoutInflater来获取布局,然后您必须通过findViewById访问TextView。