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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于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保姆级教程