android 调用视图报错The specified child already has a parent. You must call removeView"的解决
16lz
2021-01-26
在android开发过程中,有时会在不同情况下遇到同种问题:
[java] view plain copy- java.lang.IllegalStateExceptionThespecifiedchildalreadyhasaparent.YoumustcallremoveView()onthechild'sparentfirst.
新建一个项目,布局文件中仅包含一个TextView和一个ImageView,布局方式是线性布局(具体可以参考后面的源代码),运行的结果就是显示一个文本和一张图片,
在Activity的onCreate()方法中,我们通常使用以下这种方式来使用布局文件main.xml。
[java] view plain copy- setContentView(R.layout.main);
这里为了解释今天要讲解的这个异常,换一种布局文件的使用方式,即把上面的那一行代码注释掉,换成以下代码:
//获取Infalter对象
[java] view plain copy- LayoutInflaterinflater=(LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
- LinearLayoutparent=(LinearLayout)inflater.inflate(R.layout.main,null);
- ImageViewchild=(ImageView)parent.findViewById(R.id.child);
- setContentView(parent);
LayoutInflater 为布局填充类,不明白的可以自己查,或者有机会我将在博客中介绍一下,然后是将 main.xml 文件 inflate 为 LinearLayout 文件,再得到 child ,即 ImageView 。然后就是通过调用 setContentView(parent) 将这个布局 main.xml 显示出来,这时得到的效果和仅使用 s etContentView(R.layout.main) 这句代码得到的效果一样。
下面的操作将会出现异常了,大家注意:
[java] view plain copy- setContentView(child);
而这时在异常中它提示要再parent中调用removeView()。这里我们就听从指挥,在setContentView(child),之前添上一句parent.removeView(child),这时就不会再调用setContentView(child)就不会异常了,当然当前显示的将只是一幅图片了,而这时如果你调用setContentView(parent)的话将只显示文本内容,因为我们已经将childremove掉了嘛。
参考:http://blog.csdn.net/yaolingrui/article/details/7339913
更多相关文章
- 大话企业级Android应用开发实战 音乐播放器的开发
- Android使用gradle的管理本地Maven服务器
- 【Android】使用v7.widget.GridLayout做九宫格。
- Android(安卓)相对布局中的 代码中修改属性与布局文件的设置不同
- Android学习笔记(二)——Android的数据存储(一)SharedPreferences
- Android(安卓)WebView 踩过的坑
- Android学习过程中问题记录
- Fragment使用
- Android(安卓)N 各种ANR的时间