inflate 方法与 findViewById方法的区别

来源:互联网 发布:同业拆借 知乎 编辑:程序博客网 时间:2024/04/30 15:38
不同点:layoutinflater是用来找res/layout/下的xml布局文件,并且实例化;而findviewbyid()是找xml布局文件下的具体widget控件(如button、textview等)。

具体作用:

1、对于一个没有被载入或者想要动态载入的界面,都需要使用layoutinflater.inflate()来载入;

2、对于一个已经载入的界面,就可以使用activiyt.findviewbyid()开发方法 来获得其中的界面元素。

 

layoutinflater作用是将layoutxml布局文件实例化为view类对象。

获取layoutinflater的开发方法 有如下三种:

layoutinflater inflater=(layoutinflater)context.getsystemservice(context.layout_inflater_service);
view layout 
= inflater.inflate(r.layout.main, null);
 
layoutinflater inflater 
= layoutinflater.from(context); (该开发方法 实质就是第一种开发方法 ,可参考源代码)
view layout 
= inflater.inflate(r.layout.main, null);
 
layoutinflater inflater 
= getlayoutinflater();(在activity中可以使用,实际上是view子类下window的一个函数)
view layout = inflater.inflate(r.layout.main, null);

注意:

·inflate开发方法 与 findviewbyid 开发方法 不同;

·inflater 是用来找 res/layout下的 xml 布局文件,并且实例化;

·findviewbyid() 是找具体 xml 布局文件中的具体 widget 控件(如:button、textview 等)。

public class myinflate extends activity{
    private textview tv;
    public void oncreate(bundle savedinstancestate){
        super.oncreate(savedinstancestate);

        //setcontentview(r.layout.main);
        //tv = (textview) findviewbyid(r.id.tv); 

        layoutinflater inflate = layoutinflater.from(this);
        view view = inflate.inflate(r.layout.main,null);
        setcontentview(view);
    }
}

上述

此文来自: 马开东博客 转载请注明出处 网址: http://www.makaidong.com

注释掉的代码和没有注释掉的代码两种情况是相同的。

区别:
setcontentview()
一旦调用, layout就会立刻显示ui;而inflate只会把layout形成一个以view类实现成的对象,有需要时再用setcontentview(view)显示出来。一般在activity中通过setcontentview()将界面显示出来,但是如果在非activity中如何对控件布局设置操作了,这就需要layoutinflater动态加载。

public view inflate(int resourece,viewgroup root)
作用:填充一个新的视图层次结构从指定的
xml资源文件中
resource
viewlayoutid
root
 生成的层次结构的根视图
return 
填充的层次结构的根视图。如果参数root提供了,那么root就是根视图;否则填充的xml文件的根就是根视图。

其余几个重载的inflate函数类似。


具体方法请看我下一篇 博客

0 0