2011-06-10 67 views
5

我遇到findViewById()返回NULL問題,他們很多人似乎遇到。我知道findViewById()只能在onFinishInflate()的膨脹視圖後調用。我的問題是 - 什麼是觀點通貨膨脹?LayoutInflater和onFinishInflate()

在Activity中,我調用setContentView(R.layout.testview),它應該調用View構造函數並調用onDraw()。所以這膨脹的觀點是不是?如果是這樣,爲什麼有一個LayoutInflater和一個函數實際上誇大視圖?事實上,我的代碼onInflateView()從未被調用,即使整個視圖被渲染,我也能夠與程序交互。這告訴我查看通脹與調用View的構造函數和函數不同。有人可以解釋嗎?

編輯:另外,我有我使用onDraw()函數繪製的自定義視圖。不知何故,onFinishInflate()函數永遠不會被我調用。這可能是什麼原因?

-P

回答

6

我的問題是 - 什麼看法通貨膨脹?

查看通貨膨脹是將佈局XML文件轉換爲對象樹的View對象的行爲。您可以手動做到這一點使用LayoutInflater或Android會爲你從setContentView(),內置Adapter類等

在其中應該調用查看構造活動我打電話的setContentView(R.layout.testview)和也調用onDraw()。所以這膨脹的觀點是不是?

setContentView()膨脹提供的佈局文件。

如果是的話爲什麼會有一個LayoutInflater和一個函數來實際擴充視圖?

因爲有時您需要手工完成,例如在具有不同類型行(例如,頭和細節)的複雜ListView中。

+0

謝謝! Google ApiDemos中是否有這樣的例子?另外當onFinishInflate()與setContentView()調用?在我的情況下,它根本不叫。 – user220201 2011-06-10 14:19:12

+0

@ user220201:「Google ApiDemos中是否有這樣的例子?」 - 什麼樣的例子? 「另外,當onFinishInflate()與setContentView()調用?在我的情況下,它根本不叫。」 - 我之前使用過'onFinishInflate()',它工作正常,儘管我沒有任何當前的樣本。確保你有'@ Override'註釋,以防萬一你在方法簽名中犯了錯誤。 – CommonsWare 2011-06-10 14:39:45

+1

我在問一個需要調用LayoutInflater的例子。 – user220201 2011-06-10 14:42:05