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);
相关推荐
Java编程乐园21 分钟前
Java函数式编程之【流(Stream)性能优化】
java·性能优化
麦兜*25 分钟前
MongoDB 聚合管道(Aggregation)高级用法:数据统计与分析
java·数据库·后端·mongodb·springboot·springcloud
菌王33 分钟前
EXCEL 2 word 的一些案例。excel通过一些策略将内容写入word中。
开发语言·c#
励志不掉头发的内向程序员1 小时前
STL库——list(类模拟实现)
开发语言·c++·学习
Swift社区1 小时前
Swift 解法详解:LeetCode 367《有效的完全平方数》
开发语言·leetcode·swift
AI视觉网奇2 小时前
android adb调试 鸿蒙
android
蒋星熠2 小时前
Python API接口实战指南:从入门到精通
开发语言·分布式·python·设计模式·云原生·性能优化·云计算
还梦呦2 小时前
2025年09月计算机二级Java选择题每日一练——第十一期
java·开发语言·python·计算机二级
完美世界的一天2 小时前
Golang 面试题「初级」
开发语言·面试·golang