獲得 LayoutInflater 例項的三種方式

2021-08-14 18:09:17 字數 2786 閱讀 3253

在實際開發中layoutinflater這個類還是非常有用的,它的作用類似於findviewbyid()。不同點是layoutinflater是用來找res/layout/下的xml布局檔案,並且例項化;而findviewbyid()是找xml布局檔案下的具體widget控制項(如button、textview等)。 具體作用:

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

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

layoutinflater 是乙個抽象類,在文件中如下宣告:

public abstract class layoutinflater extends object

獲得 layoutinflater 例項的三種方式:

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

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

3.layoutinflater inflater = layoutinflater.from(context);  

其實,這三種方式本質是相同的,從原始碼中可以看出:

getlayoutinflater():

activity 的 getlayoutinflater() 方法是呼叫 phonewindow 的getlayoutinflater()方法,看一下該源**:

public phonewindow(context context) {         

super(context);         

mlayoutinflater = layoutinflater.from(context); 

可以看出它其實是呼叫 layoutinflater.from(context)。

layoutinflater.from(context):

publicstaticlayoutinflater from(context context) {      

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

if(layoutinflater ==null) {          

thrownewassertionerror("layoutinflater not found.");      

returnlayoutinflater;  

可以看出它其實呼叫 context.getsystemservice()。

結論:所以這三種方式最終本質是都是呼叫的context.getsystemservice()。

inflate 方法通過 sdk 的 api 文件,可以知道該方法有以下幾種過載形式,返回值均是 view 物件,如下:

1

2public view inflate (int

resource, viewgroup root);

3public

view inflate (xmlpullparser parser, viewgroup root);

4public view inflate (xmlpullparser parser, viewgroup root, boolean

attachtoroot);

5public view inflate (int resource, viewgroup root, boolean

attachtoroot);

67 layoutinflater inflater =(layoutinflater)getsystemservice(layout_inflater_service);

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

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

10//

error

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

對於上面**,指定了第二個引數 viewgroup root,當然你也可以設定為 null 值。

注意:·inflate方法與 findviewbyid 方法不同;

·inflater 是用來找 res/layout下的 xml 布局檔案,並且例項化;

·findviewbyid() 是找具體 xml 布局檔案中的具體 widget 控制項(如:button、textview 等)。

獲得本地IP

一些定義 hostent declare struct hostent struct in addr s un b struct s un w u long s addr s un define s addr s un.s addr can be used for most tcp ip code ...

獲得檔案路徑

1 獲得絕對路徑 eg.c yuanzhenhai littlesea.txt 2 當前相對路徑 eg.littlesea.txt 3 獲得目錄上一層的相對路徑 假如已經知道當前路徑是.littlesea.txt 得到它的上一層路徑yuanzhenhai中的xiaohai.txt路徑的方法是 eg....

獲得MAC位址

void getmac out char pszbuffer,dword nbuffersize 第二次呼叫getadaptersaddresses 獲取實際想獲取的資訊.if dwretval getadaptersaddresses af inet,0,null,paddresses,outbu...