Android 开发问题:The specified child already has a parent.

  • 在 Android 开发中,应用运行时,报如下错误

    java.lang.IllegalStateException:
    The specified child already has a parent.
    You must call removeView() on the child's parent first.
    at android.view.ViewGroup.addViewInner(ViewGroup.java:5235)
    at android.view.ViewGroup.addView(ViewGroup.java:5064)
    at android.view.ViewGroup.addView(ViewGroup.java:5004)
    at android.view.ViewGroup.addView(ViewGroup.java:4976)
    ...

问题原因
复制代码
The specified child already has a parent.
  1. 错误信息表明试图将一个已经有父视图的子视图添加到另一个父视图中

  2. 在 Android 中,一个视图只能有一个父视图,不能同时属于多个父视图

问题复现
java 复制代码
ConstraintLayout main = findViewById(R.id.main);

TextView tvTest = new TextView(this);

tvTest.setText("test");

// 第 1 次添加,正常
main.addView(tvTest);

// 第 2 次添加,抛出异常
main.addView(tvTest);
复制代码
# 输出结果

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.my.view/com.my.view.ViewProblemActivity}: 
java.lang.IllegalStateException: 
The specified child already has a parent. 
You must call removeView() on the child's parent first.
处理策略
  • 在添加视图前,先检查它是否有父视图,如果有,先移除,然后再添加
java 复制代码
ConstraintLayout main = findViewById(R.id.main);

TextView tvTest = new TextView(this);

tvTest.setText("test");

// 第 1 次添加
if (tvTest.getParent() != null) {
    ViewGroup parent = (ViewGroup) tvTest.getParent();
    parent.removeView(tvTest);
}
main.addView(tvTest);

// 第 2 次添加
if (tvTest.getParent() != null) {
    ViewGroup parent = (ViewGroup) tvTest.getParent();
    parent.removeView(tvTest);
}
main.addView(tvTest);
相关推荐
赶飞机偏偏下雨15 分钟前
【Java笔记】消息队列
java·开发语言·笔记
00后程序员张17 分钟前
C++ string 类使用攻略
开发语言·c++
融化的雪27 分钟前
reactflow整理节点,尾节点位置的大坑
开发语言·前端·javascript
豐儀麟阁贵35 分钟前
2.6 代码注释与编码规
java·开发语言
程序员三明治36 分钟前
【Mybatis从入门到入土】ResultMap映射、多表查询与缓存机制全解析
java·sql·缓存·mybatis·resultmap·缓存机制·多表查询
egoist202339 分钟前
[linux仓库]信号保存[进程信号·肆]
linux·开发语言·信号集·信号保存·sigpending
华仔啊41 分钟前
Java 重试机制没写对,线上很容易出问题!这份生产级方案请收好
java·后端
你不是我我44 分钟前
【Java 开发日记】什么是线程池?它的工作原理?
java·开发语言
Seven971 小时前
剑指offer-35、数组中的逆序对
java·leetcode
成子不是橙子1 小时前
Langchain | Ollama | Python快速上手使用LLM的DEMO
开发语言·python·langchain·ollama