常見的LayoutInflater類

2021-09-06 05:48:08 字數 2818 閱讀 3299

抽象類layoutinflater,其作用類似於findviewbyid()方法。不過它是用來找res/layout下的xml布局檔案,並且例項化;而findviewbyid()方法僅僅是通過控制項id查詢某xml布局檔案下具體widget控制項(如button、textview等)。

兩者具體用途:

1. 對於乙個沒有被載入或者想要動態載入的介面,都需要使用layoutinflater.inflate()來載入;

2. 對於乙個已經載入的介面,就可以直接使用activity.findviewbyid()方法來獲得其中的介面元素。

獲得layoutinflater例項的三種方式:

layoutinflater inflater = getlayoutinflater();  // 呼叫activity的getlayoutinflater()

layoutinflater localinflater = (layoutinflater)context.getsystemservice(context.layout_inflater_service);

layoutinflater inflater = layoutinflater.from(context);

結論:經檢視各自實現原始碼,可知這三種方式最終本質都是呼叫的context.getsystemservice()。

inflate方法

該方法的多種過載形式,其返回值均是view物件。

public view inflate (int resource, viewgroup root) 

public view inflate (xmlpullparser parser, viewgroup root)

public view inflate (xmlpullparser parser, viewgroup root, boolean attachtoroot)

public view inflate (int resource, viewgroup root, boolean attachtoroot)

1:public view inflate (int resource, viewgroup root) 

resource:view的layout的id

root:如果為null,則將此view作為根,此時既可以應用此view中的其他控制項了。

如果!null,  則將預設的layout作為view的根。

2:public view inflate ( xmlpullparser parser, viewgroup root) 

parser:你需要解析xml的解析介面

root:如果null,則將此view作為根,此時既可以應用此view中的其他控制項了。

如果!null, 則將預設的layout作為view的根。

3:public view inflate ( xmlpullparser parser, viewgroup root, boolean attachtoroot) 

parser:你需要解析view的xml的解析介面

root:如果null,則將此view作為根,此時既可以應用此view中的其他控制項了。

如果!null, 則將預設的layout作為view的根。

attachtoroot:

ture:也就將此解析的xml作為view根

fase:則為預設的xml,做為根檢視view

4:public view inflate (int resource, viewgroup root, boolean attachtoroot) 

resource:view的layout的id

root:如果null,則將此view作為根,此時既可以應用此view中的其他控制項了。

如果!null, 則將預設的layout作為view的根。

attachtoroot:

ture:也就將此解析的xml作為view根

fase:則為預設的xml,做為根檢視view

示意**:

layoutinflater inflater =(layoutinflater)getsystemservice(layout_inflater_service);  

view view =inflater.inflate(r.layout.custom, (viewgroup)findviewbyid(r.id.test));

//edittext edittext = (edittext)findviewbyid(r.id.content);

//error

edittext edittext = (edittext)view.findviewbyid(r.id.content);

另外:在activity中:大家是否知道,在setcontentview(new mysu***ceview(this))後,此activity中宣告的view控制項(如:textview)為什麼引用不到layout布局檔案中的控制項id呢!初一看能夠應用到,但是為什麼編譯就報空指標呢!原因:在setcontentview(new mysu***ceview(this))後,此時的view變為了根檢視了,雖然能應用到textview對應的id,但是我在 mysu***ceview中根本就沒有這個物件,所以就報空指標咯!解決辦法:

view view = layoutinflater.from(this).inflate(r.layout.passover, null);注:每解析一次都會產生不同的物件

然後你再引用沒問題,使用自如了。

android中LayoutInflater的使用

inflater英文意思是膨脹,在android中應該是擴充套件的意思吧。layoutinflater的作用類似於 findviewbyid 不同點是layoutinflater是用來找layout資料夾下的xml布局檔案,並且例項化!而 findviewbyid 是找具體某乙個xml下的具體 wi...

mysql常見的優化策略 Mysql常見的優化策略

資料庫設計方面優化 1 資料庫設計符合第三正規化,為了查詢方便可以有一定的資料冗餘。2 選擇資料型別優先順序 int date,time enum,char varchar blob,選擇資料型別時,可以考慮替換,如ip位址可以用ip2long 函式轉換為unsign int型來進行儲存。3 對於c...

oracle常見單詞 Oracle中常見的英語單詞

fatal 重要的,致命的。常見於 root dido1 ps ef grep init.cssd root 2918 1 0 09 59 00 00 00 bin sh etc init.d init.cssd fatal dependencies 附屬的 diagnostic 診斷 常見於 ro...