Android layoutInflate.inflate 方法具体解释,removeView()错误解决
2023-09-27 14:27:01 时间
错误:
The specified child already has a parent. You must call removeView()。
解答:
这个错误非常直白,就是你viewGroup.addView(childView); 中childView已经有父View了。错误原因非常多,我主要讲下 mLayoutInflater.inflate(id, rootView, false);造成的这个错误。(该方法有两种。一种是2个參数,一种是3个參数)。
2个參数:
第一个參数:layout的XML文件id。
第二个參数:将XML文件里的根view,作为子View加入到的那个父View。也就是父View布局
a:假设rootView非空,方法返回值是rootView(rootView已加入xml代表的子View)。
b:假设rootView为空,方法直接返回子View(xml代表的子View)。那么XML文件里的LayoutParams就无效了。(由于LayoutParams是给该XML代表的View的父View使用。
在父View的onMeasure()中依据LayoutParams是MATCH_PARENT还是WRAP_CONTENT,来測量子View的大小。假设没有父View就不是必需了)
故用mLayoutInflater.inflate(id,
rootView)。返回的实际上是rootView,而rootView肯定已经有父布局了(DecorateView,系统生成的)。所以 rootView.addView(mLayoutInflater.inflate(id, rootView)).等价于rootView.addView(rootView).所以错了。
3个參数:
问题来了。如何修复b情况。既保留XML文件里的LayoutParams属性,又不想有方法return父View。
两步 rootView != null (是那个对象随便),第三个參数 == false;mLayoutInflater.inflate(id, rootView, false);这样就能够不attach root view。又保留LayoutParams。
相关文章
- Android GC原理探究
- 一个能让你了解所有函数调用顺序的Android库
- Android中的事件分发和处理
- WireX:Android智能手机组成的DDoS僵尸网络
- Android上传私有插件到私有MAVEN-PUBLISH
- Mac运行Android模拟器报The emulator process for AVD XXX has terminated错误
- android xml 布局错误
- android 解决.XML提示ava.lang.NullPointerException at错误后XML没显示
- Android录屏命令、Android录Gif、Android录视频
- android的进度条使用
- Android 6.0 动态权限申请
- Android 图片预览功能
- Android中.9图片的含义及制作教程
- 解决"No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android"错误
- Android Studio Error—Gradle: 错误:编码 GBK 的不可映射字符的
- 【错误记录】编译 Android 版本的 ijkplayer 报错 ( ./init-android.sh: 第 37 行: cd: android/contrib/: 没有那个文件或目录 )
- 【错误记录】Android Studio 配置 AspectJ 报错 ( Failed to create Jar file C:xxxaspectjtools-1.8.10.jar. )
- Android推送之极光推送
- Android选择器类库,包括日期时间选择器、单项选择器、地址选择器、颜色选择器、文件目录选择器、数字选择器、星座选择器等
- ubuntu 11.10(32位系统)下编译android源码 make错误解决办法
- 【我的Android进阶之旅】解决strings.xml格式化占位符错误: Multiple substitutions specified in non-positional format
- 我的Android进阶之旅------>解决错误:You need to use a Theme.AppCompat theme (or descendant) with this activity.
- 我的Android进阶之旅------>解决错误: java.util.regex.PatternSyntaxException: Incorrect Unicode property