對LayoutInflater的一些理解記錄

對LayoutInflater的一些理解記錄

通過在查看一些關(guān)于LayoutInflater的資料稀颁,整理成為自己的理解。

相關(guān)的鏈接:

//Android獲取LayoutInflater對象的方法總結(jié)

http://blog.csdn.net/bigconvience/article/details/26582497

//詳解LayoutInflater.inflate()

https://zhuanlan.zhihu.com/p/23334059

//[譯轉(zhuǎn)]深入理解LayoutInflater.inflate()

https://zhuanlan.zhihu.com/p/23334059


我將這些資料分為兩步來理解:

第一步:Android獲取LayoutInflater對象的方法(分為三種情況):

a)、若能獲取LayoutInflater對象時:

1、LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

? ? ? View?child?=?inflater.inflate(R.layout.child,null);


2、LayoutInflater inflater = LayoutInflater.from(context);

? ? ? View?child?=?inflater.inflate(R.layout.child,null);


b)在Activity中時:

1、View child = getLayoutInflater().inflate(R.layout.child, item,false);


2谋减、View view;

? ? ?LayoutInflater?inflater?=?(LayoutInflater)???getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

? ? ?view?=?inflater.inflate(R.layout.mylayout,null);


c)在使用View的靜態(tài)方法時:

1、View view=View.inflate(context, R.layout.child,null)

第二步:inflate()中的attachToRoot扫沼,何時為true出爹,何時為false?

a)attachToRoot為true時:(layout文件會被填充并且附加在ViewGroup內(nèi))

例如:

1庄吼、inflate(R.layout.xxx,parent,true);

2、inflate(R.layout.xxx,parent);

3严就、inflater.inflate(R.layout.xxx,this);

b)attachToRoot為false時:(layout文件會被填充,但是不會附加在ViewGroup內(nèi)总寻,需要自己手動去addview加進(jìn)去)

例如:

1、inflate(R.layout.xxx,parent,false);


使用LayoutInflater時避開崩潰梢为、異常表現(xiàn)與誤解

1渐行、如果可以傳入ViewGroup作為根元素,那就傳入它铸董。

2祟印、避免將null作為根ViewGroup傳入。

3粟害、當(dāng)我們不負(fù)責(zé)將layout文件的View添加進(jìn)ViewGroup時設(shè)置attachToRoot參數(shù)為false蕴忆。

4、不要在View已經(jīng)被添加進(jìn)ViewGroup時傳入true悲幅。

5套鹅、自定義View時很適合將attachToRoot設(shè)置為true。


下面的這段內(nèi)容是引用別人的:

//詳解LayoutInflater.inflate()

https://zhuanlan.zhihu.com/p/23334059

就拿我們的Adapter來說吧汰具,在創(chuàng)建item布局時卓鹿,有下列幾種情況:

inflate(R.layout.xxx,null);

inflate(R.layout.xxx,parent,false);

inflate(R.layout.xxx,parent,true);

那么就講一下這三種情況把。

首先留荔,inflate(R.layout.xxx,null) 吟孙。這是最簡單的寫法,這樣生成的布局就是根據(jù)http://R.layout.xxx返回的View存谎。要知道拔疚,這個布局文件中的寬高屬性都是相當(dāng)于父布局而言的肥隆。由于沒有指定parent既荚,所以他的寬高屬性就失效了,因此不管你怎么改寬高屬性栋艳,都無法按你想象的那樣顯示恰聘。

然后,inflate(R.layout.xxx,parent,false)吸占。相較于前者晴叨,這里加了父布局,不管后面是true還是false矾屯,由于有了parent兼蕊,布局文件的寬高屬性是有依靠了,這時候顯示的寬高樣式就是布局文件中的那樣了件蚕。

最后孙技,inflate(R.layout.xxx,parent,true)产禾。這樣……等等,報(bào)錯了牵啦?亚情??哦哈雏,不要驚奇楞件,分析一下原因:首先,有了parent裳瘪,所以可以正確處理布局文件的寬高屬性土浸。然后,既然attachToRoot為true盹愚,那么根據(jù)上面的源碼就會知道栅迄,這里會調(diào)用root的addView方法。而如果root是listView等皆怕,由于他們是繼承自AdapterView的毅舆,看看AdapterView的addView方法:

@OverridepublicvoidaddView(Viewchild){

thrownewUnsupportedOperationException("addView(View) is not supported in AdapterView");}

不資磁啊,那好吧愈腾,如果換成RecyclerView呢憋活?還是報(bào)錯了,看看源碼:

if(child.getParent()!=null){

thrownewIllegalStateException("The specified child already has a parent. "+"You must call removeView() on the child's parent first.");}

現(xiàn)在知道了吧虱黄,adpater里面不要用true悦即。那么什么時候用true呢?答案是fragment橱乱。在為fragment創(chuàng)建布局時辜梳,如果為true,那么這個布局文件就會被添加到父activity中盛放fragment的布局中泳叠。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末作瞄,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子危纫,更是在濱河造成了極大的恐慌宗挥,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件种蝶,死亡現(xiàn)場離奇詭異契耿,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)螃征,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進(jìn)店門搪桂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人盯滚,你說我怎么就攤上這事踢械∽驹螅” “怎么了?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵裸燎,是天一觀的道長顾瞻。 經(jīng)常有香客問我,道長德绿,這世上最難降的妖魔是什么荷荤? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮移稳,結(jié)果婚禮上蕴纳,老公的妹妹穿的比我還像新娘。我一直安慰自己个粱,他們只是感情好古毛,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著都许,像睡著了一般稻薇。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上胶征,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天塞椎,我揣著相機(jī)與錄音,去河邊找鬼睛低。 笑死案狠,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的钱雷。 我是一名探鬼主播骂铁,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼罩抗!你這毒婦竟也來了拉庵?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤澄暮,失蹤者是張志新(化名)和其女友劉穎名段,沒想到半個月后阱扬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體泣懊,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年麻惶,在試婚紗的時候發(fā)現(xiàn)自己被綠了馍刮。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡窃蹋,死狀恐怖卡啰,靈堂內(nèi)的尸體忽然破棺而出静稻,到底是詐尸還是另有隱情,我是刑警寧澤匈辱,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布振湾,位于F島的核電站,受9級特大地震影響亡脸,放射性物質(zhì)發(fā)生泄漏押搪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一浅碾、第九天 我趴在偏房一處隱蔽的房頂上張望大州。 院中可真熱鬧,春花似錦垂谢、人聲如沸厦画。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽根暑。三九已至,卻和暖如春徙邻,著一層夾襖步出監(jiān)牢的瞬間购裙,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工鹃栽, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留躏率,地道東北人。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓民鼓,卻偏偏與公主長得像薇芝,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子丰嘉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評論 2 355

推薦閱讀更多精彩內(nèi)容