这是错的吗? TextView displayTextView =(TextView)findViewById(R.id.DisplayTextView);

时间:2012-02-01 06:59:52

标签: android textview assign

每个人,我是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,我会按如下方式更改代码,然后一切顺利。

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

为什么呢?这两个代码有什么不同吗?

3 个答案:

答案 0 :(得分:10)

在您致电setContentView(R.layout.main)之前,TextView不是活动视图层次结构的一部分。当您声明变量时:

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

该视图尚不存在,因此displayTextView设置为null。然后,当您尝试在NullPointerException中致电setText()时,您会收到onCreate()

答案 1 :(得分:0)

由于文字视图未设置为您的活动内容而您正在尝试查找该文字视图,因此在您设置内容后调用setContentView()时,文字视图仅会在您创建的活动中绑定对于您的活动,您可以从该内容中获取View

答案 2 :(得分: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");      
     }
    }