我目前正在使用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;
}
答案 0 :(得分:2)
testTextView没有指向任何对象,所以尝试像
这样的东西testTextView = (TextView) findViewById(R.id.testTextView);
修改强>
如果您看到lifecycle of a fragment,则表示onCreateView
在 onCreate
之后被称为,因此您的onCreate
没有任何引用您的对象,即布局中的textview
答案 1 :(得分:2)
您尚未使用setContentView
,因此您将获得TextView的NPE。
onCreate
发生在onCreateView
之前。如果你想从那里的布局访问某些东西,你需要setContentView
...这对于DialogFragment来说不是一个好主意。
在onCreateView
之后将该位代码移至setContentView
,您就可以了。
供您参考,这是片段生命周期:
答案 2 :(得分:0)
您是否在onCreateView中初始化了testTextView?您必须在onCreateView中使用LayoutInflater来获取布局,然后您必须通过findViewById访问TextView。