亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

解釋LayoutInflater的inflate方法.

標簽:
Android

第一次接触inflate方法是在使用ListView的getView()时. 当时只知道这么写, 并不知道为什么.

LayoutInflate.from(getContext()).inflate(ID, parent, false);

想写一下为什么这么写的原因, 希望能帮到Android道路上的新手(如果有iOS和Android的问题, 欢迎加好友一起讨论).

这个inflate方法有四个重载, 分别是:

// A
public View inflate(@LayoutRes int resource, @Nullable ViewGroup root)

// B
public View inflate(XmlPullParser parser, @Nullable ViewGroup root)

// C
public View inflate(@LayoutRes int resource, @Nullable ViewGroup root, boolean attachToRoot)

// D
public View inflate(XmlPullParser parser, @Nullable ViewGroup root, boolean attachToRoot)

首先先说说形参的意义.

  • resource : 它是要解析的XML文件的ID号(必填)
  • root : 也就是ListView本身
    • 如果传入不为空, attachToRoot也为true, 就把XML解析后的view加入root子控件, 然后返回这个root.
    • 否则, 就返回一个解析之后的XML生成的view.
  • attachToRoot : 决定是否让root成为返回值的父控件
  • parser : XML的解析器

这四个方法的关系如下, 这样就很清晰了, 最终都会去调用D方法. 由D方法负责去解析XML

  • 调用A之后, A内部调用C, 并将attachToRoot设置为true, C内部调用D.
  • 调用
    B之后, B内部调用D, 并将attachToRoot设置为true
  • 调用C之后, C内部调用D

为什么要像下面这么写来返回View?

LayoutInflate.from(getContext()).inflate(ID, parent, false);
  • 省略attachToRoot, 其他不变行不行? 不行. 因为这在执行时会默认传入true. 由上面的解释可以知道, 这样会返回那个root, 也就是返回了整个ListView, 这个ListView再被当做getView()方法返回传入ListView, 会直接报错.
  • 将attachToRoot传入true, 其他不变行不行? 不行. 上面的后半段解释过了
  • 将root传入null, 其他不变行不行? 分情况:
    • ListView的cell的布局文件中的UI控件的Layout_XX全部依赖最外层控件, 那就有影响了, 此时最外层的Layout_XX属性失效, 使用ListView的默认属性.
    • ListView的cell的布局文件中的UI控件的Layout_XX是固定的, 也就是常量值, 那就不受影响, 可以正常工作.
點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消