Xml View的加載

常用下面兩種方式:

  1. View.inflate(context,R.layout.recyclerview_app_main_normal,null)
  2. LayoutInflater.from(context).inflate(R.layout.recyclerview_app_main_normal, parent, false)

兩種方式的區別與聯繫:

View類中的inflate方法內部包裹了LayoutInflater類的inflate方法,這個方法是一個靜態方法,不需要創建View類的對象,直接使用View類名調用。相比另一種方法是一種簡便方法,但不如上一個方法功能強大。另外這種方式最外層佈局參數不會有效

  1. 如果root爲null,attachToRoot將失去作用,設置任何值都沒有意義。同時這個佈局的最外層參數就沒有效了
  2. 如果root不爲null,attachToRoot設爲false,則會將佈局文件最外層的所有layout屬性進行設置,當該view被添加到父view當中時,這些layout屬性會自動生效
  3. 如果root不爲null,attachToRoot設爲true,則會給加載的佈局文件的指定一個父佈局,即root

總之,View.inflate()會調用LayoutInflater.from().inflate(),而LayoutInflater.from().inflate()會調用context.getSystemService(Context.LAYOUT_INFLATER_SERVICE)。

所以,如果佈局的最外層設置了參數,就是用第二種;如果最外層未設置參數,可以使用第一種。

參考,https://www.jianshu.com/p/81a698aaf05c

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章