LayoutInflater 調(diào)用 inflate 方法 和 View 調(diào)用 inflate 方法的區(qū)別

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

我們打開(kāi)View的inflate方法會(huì)看到如下代碼:

圖一

咋一看,和我們平時(shí)使用的

圖二

沒(méi)又太大區(qū)別。我們接著打開(kāi)View中的inflate方法中的factory.inflate()

方法,如下:

圖三

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容