1

我目前正在使用 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;
}
4

3 回答 3

2

你还没有使用setContentView,所以你得到了 TextView 的 NPE。

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

将那段代码移到onCreateView你之后setContentView,你会没事的。

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

在此处输入图像描述

于 2012-06-15T07:15:33.580 回答
2

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

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

编辑:

如果您看到一个片段的生命周期,它表示它是在之后onCreateView调用的,因此您没有对您的对象的任何引用,即布局中的 textview onCreateonCreate

于 2012-06-15T07:08:20.833 回答
0

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

于 2012-06-15T07:08:52.777 回答