2017-07-12 85 views
-1

當我將「setContentView」放在「NumbersClickListners」行的上方時,應用程序按預期工作。爲什麼setContentView的位置更改會改變應用程序的行爲?

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_main); 

     NumbersClickListners numbersClickListners = new NumbersClickListners(); 
     TextView numbers = (TextView) findViewById(R.id.numbers); 
     numbers.setOnClickListener(numbersClickListners); 

    } 

但是,只要「setContentView」放在以「NumbersClickListners」開頭的三行之下,應用就會崩潰。代碼看起來像這樣

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 


     NumbersClickListners numbersClickListners = new NumbersClickListners(); 
     TextView numbers = (TextView) findViewById(R.id.numbers); 
     numbers.setOnClickListener(numbersClickListners); 


     setContentView(R.layout.activity_main); 

    } 

我很不確定這種行爲的原因。有人可以幫我嗎?

+1

因爲是的setContentView什麼膨脹的觀點 – tyczj

+0

@tyczj糾正我,如果我錯了,當我回憶一下你剛剛解釋。編譯器開始讀取來自的setContentView代碼,因爲它是一個充氣時,由於其上面的行被跳過,是嗎? –

+0

我不知道你是想說,代碼永遠不會被跳過 – tyczj

回答

0

讓我們看看佈局的生活。

首先,你必須通過聲明XML文件,其中你做你的設計以用戶友好的方式,並根據您的需要命名的元素去創造。 現在你的佈局只是一個文件,Android並不關心性能的原因。

接下來你要做的就是使用你的佈局。爲此,需要將文件轉換爲稱爲ViewGroup和Views的對象的內部結構。 這個過程被稱爲充氣。這就是系統可以通過調用findViewById()爲您查找視圖的關鍵。

因此,在第二個片段中,您要求活動爲您找到一個未充氣的按鈕。這導致拋出異常。

一般來說,你希望在OnCreate做的第一件事就是打電話的setContentView()。

相關問題