2012-02-01 62 views
3

大家好,我是android开发的新手。现在我有一个自己无法解决的问题。下面的代码有什么问题(特别是代码中标出的行)?这是错的吗? TextView displayTextView =(TextView)findViewById(R.id.DisplayTextView);

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

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

回答

9

TextView的是直到你打电话setContentView(R.layout.main)后的活动的视图层次结构的一部分。当你声明这样的变量:

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

认为还不存在,所以displayTextView被设置为null。然后你得到一个NullPointerException当您尝试调用setText()onCreate()

+0

+1。 findViewById默认为活动的布局。由于活动的布局在setContentView中“初始化” – josephus 2012-02-01 07:07:50

+0

谢谢。我知道了。 – Searene 2012-02-01 08:10:31

0

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

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