2012-03-10 179 views
17

誰/什麼調用onFinishInflate()?無論如何膨脹我的佈局文件(在代碼中),這個方法似乎永遠不會被觸發。任何人都可以給我一個例子,或者告訴我onFinishInflate()實際上被調用了嗎?onFinishInflate()永遠不會被調用

回答

30

View.onFinishInflate()在視圖(及其子元素)從XML膨脹後調用。具體而言,在撥打LayoutInflater.inflate(...)期間將調用onFinishInflate()。通貨膨脹是從根開始遞歸執行的。包含孩子的視圖可能需要知道孩子何時完成充氣。此回調的主要用途之一是ViewGroups在孩子準備好後執行特殊操作。

假設您有一個名爲CustomViewView的子類,並且它不會在內部自動膨脹任何佈局。如果你有在你的佈局CustomView的地方,即:

... 
<com.company.CustomView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" /> 
... 

您將看到一個回調onFinishInflate()一旦被誇大。如果這是您的活動的主要佈局,那麼可以在調用Activity.setContentView(int)之後考慮這種情況。在內部,這將叫LayoutInflater.inflate(...)

另外,如果你創建的CustomView一個實例:

... 
new CustomView(context); 
... 

...你不會有機會onFinishInflate()通話。以這種方式實例化它自然意味着它沒有孩子,因此它不需要等待它們以遞歸方式實例化,就像XML通貨膨脹一樣。

+6

所以文檔是錯誤的。如果手動膨脹佈局,則不會調用回調。但是你仍然可以手動調用它來保持同質。 – Snicolas 2014-05-10 00:58:24

+0

你不能自己調用​​這個方法。這是一種受保護的方法...您需要一個受保護的類。注意到在包'android.view'中使用它不起作用。 – 2016-01-20 18:26:59

+2

這不是真的,你可以在構造函數中調用'super.onFinishInflate'或重寫的'onFinishInflate'。 – GLee 2016-05-16 23:39:03

相關問題