3

皆さん、私はAndroid開発の初心者です。今、自分では解決できない問題があります。以下のコード (特にコードでマークされた行) に何か問題がありますか?

MainActivity.java:

package com.amaker.ch02.app;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends Activity {
    /** Called when the activity is first created. */
    private TextView displayTextView = (TextView)findViewById(R.id.DisplayTextView);  <--Possibly this line

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        displayTextView.setText("change in the code"); 
    }
}

実行すると、AVD で次のメッセージが表示されました。アプリケーションが予期せず停止しました。もう一度やり直してください。しかし、宣言の直後にdisplayTextViewを割り当てない場合、IOWは次のようにコードを変更すると、すべてがうまくいきます。

package com.amaker.ch02.app;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends Activity {
    /** Called when the activity is first created. */
    private TextView displayTextView;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        displayTextView = (TextView)findViewById(R.id.DisplayTextView);
        displayTextView.setText("change in the code"); 
    }
}

なんで?2つのコードに違いはありますか?

4

3 に答える 3

10

TextViewは、を呼び出すまで、アクティビティのビュー階層の一部ではありませんsetContentView(R.layout.main)。このように変数を宣言すると、次のようになります。

private TextView displayTextView = (TextView)findViewById(R.id.DisplayTextView);

ビューはまだ存在しないため、displayTextViewに設定されnullます。次に、NullPointerExceptionで電話をかけようとすると、が表示setText()されonCreate()ます。

于 2012-02-01T07:01:50.947 に答える
0

テキストビューはアクティビティのコンテンツに設定されておらず、検索しようとしているため、テキストビューはsetContentView()、コンテンツをアクティビティに設定した後に呼び出すときに、作成時にのみアクティビティにバインドされます。Viewそのコンテンツから。

于 2012-02-01T07:03:28.373 に答える
0

これを試して。

public class MainActivity extends Activity 
{     

    /** Called when the activity is first created. */     
      private TextView displayTextView;
    @Override     
    public void onCreate(Bundle savedInstanceState) 
     {         
        super.onCreate(savedInstanceState);         
        setContentView(R.layout.main);    
        displayTextView = (TextView)findViewById(R.id.DisplayTextView);         
        displayTextView.setText("change in the code");      
     }
    } 
于 2012-02-01T07:04:22.913 に答える