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"); 
    }
}

为什么?这两个代码有区别吗?

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()在为活动设置内容后调用时,您可以获得Views从那个内容。

于 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 回答