2012-02-01 17 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");  
    } 
    }