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呼び出されたため、オブジェクト、つまりレイアウト内のテキストビューへの参照がないことがわかります。 onCreateonCreate

于 2012-06-15T07:08:20.833 に答える
0

onCreateViewでtestTextViewを初期化しましたか?onCreateViewでLayoutInflaterを使用してレイアウトを取得してから、findViewByIdを介してTextViewにアクセスする必要があります。

于 2012-06-15T07:08:52.777 に答える