LayoutInflater工作

1. LayoutInflater的作用

把xml文件通过一系列复杂的解析过程转换成我们使用的View对象。

2. LayoutInflater的基本使用

View view = LayoutInflater.from(context).inflate(resourceId, parent, false);
可以看到LayoutInflater的使用分两步:
第一步
获取LayoutInflater的实例
LayoutInflater layoutInflater=LayoutInflater.from(context);


第二步
调用inflate()方法来加载布局
inflate(resourceId, parent, false)

里面有三个参数。

  • [ 第一个参数 ]
    是我们要加载的xml文件的名字,通常是R.layout.banner_layout这个样子。

  • [ 第二个参数 ]
    就是我们指定的这个布局的父View。为什么要指定这个parent?假如我们要加载R.layout.banner_layout布局文件。把它转换成view对象之后它该在哪里显示来让我们看到呢,就是这个parent。parent就是这个布局文件的父View。

  • [ 第三个参数 ]
    是一个boolean值,false就是我不要把布局文件添加到parent中,true就是我要把布局文件添加到parent中。如果为false,那么必须要有一个parent.addView(view)的操作我们才能看到布局文件的显示。
    使用RecyclerView的适配器创建ViewHolder对象时

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        return new MyViewHolder(
                LayoutInflater.from(parent.getContext()).inflate(R.layout.banner_layout, parent, false));
    }

我们发现第三个参数为false,并且也没有使用parent.addView(view)来把它加进parent中,但是它就是更够显示出来。这是因为在 LayoutInflater的源码中有一个parent.addView(view)的操作。

3. 小结

inflate(int resource,ViewGroup root,boolean attachToRoot)的解析
1.如果root为null,attachToRoot将会失去作用,无意义。
2.如果root不为null,attachToRoot设为true.则会给加载的布局文件指定一个父布局,即root。
3.如果root不为null,attachToRoot设为false,则会将布局文件最外层的所有layout属性进行设置,当该view被添加到父view中时,这些layout属性会自动失效。
4.在不设置attachToRoot参数的情况下,如果root不为null,attachToRoot参数默认为true。

参考 https://blog.csdn.net/guolin_blog/article/details/121889703?spm=1001.2014.3001.5501

posted @   我的小鱼干嘞  阅读(86)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程
点击右上角即可分享
微信分享提示