LayoutInflater 調用 inflate 方法 和 View 調用 inflate 方法的區別

LayoutInflater 和 view 都可以調用inflate()方法來加載布局文件。但是他們之間有什么區別嗎?

我們打開View的inflate方法會看到如下代碼:

圖一

咋一看,和我們平時使用的

圖二

沒又太大區別。我們接著打開View中的inflate方法中的factory.inflate()

方法,如下:

圖三

我們看用紅線框標出的參數,可以這么理解,如果傳入的根View不為空的話,那加載的布局文件將添加到該root View中(inflate的第三個參數為是否 attach to root)。那看到的人就會問,那又怎么了。如果用同一個root去加載多個布局文件或者多次加載同一個布局文件就會有問題了。如果你用View中的inflate的方法,用同一個parent去多次加載布局文件,將會得到這樣的錯誤,IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.那么你又會問用LayoutInflater中的inflate方法為什么不會有這樣的問題,那時因為LayoutInflater中的inflate方法在傳入parent view的時間可以指定,是否attach 到parent view上(如圖二所示)。然而View的inflate方法,如果傳入parent view就一定要附加到parent view視圖中。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容