您的位置:首页 > 其它

inflate 方法与 findViewById方法的区别

2016-12-14 21:31 267 查看
不同点:layoutinflater是用来找res/layout/下的xml布局文件,并且实例化;而findviewbyid()是找xml布局文件下的具体widget控件(如button、textview等)。

具体作用:

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

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

 

layoutinflater作用是将layout的xml布局文件实例化为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:view的layout的id

root: 生成的层次结构的根视图

return 填充的层次结构的根视图。如果参数root提供了,那么root就是根视图;否则填充的xml文件的根就是根视图。

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

具体方法请看我下一篇 博客
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: