android开发过程中,有时会在不同情况下遇到同种问题:

[java] view plain copy
  1. java.lang.IllegalStateExceptionThespecifiedchildalreadyhasaparent.YoumustcallremoveView()onthechild'sparentfirst.
也就是非法状态异常,它说这个特定的 child 已经有一个 parent 了,你必须在这个 parent 中首先调用 removeView() 方法,才能继续你的内容。这里很明显这个 child 是一个 View ,一个子( child View 必须依赖于父( parent View ,如果你要使用这个 child ,则必须通过 parent ,而你如果就是硬想使用这个 child ,那么就得让这个 child parent 脱离父子关系(即 removeView ())……算了还是举个简单的例子来说明一下,省的我说的乱七八糟,你听的也晕。

新建一个项目,布局文件中仅包含一个TextView和一个ImageView,布局方式是线性布局(具体可以参考后面的源代码),运行的结果就是显示一个文本和一张图片,

ActivityonCreate()方法中,我们通常使用以下这种方式来使用布局文件main.xml

[java] view plain copy
  1. setContentView(R.layout.main);

这里为了解释今天要讲解的这个异常,换一种布局文件的使用方式,即把上面的那一行代码注释掉,换成以下代码:

//获取Infalter对象

[java] view plain copy
  1. LayoutInflaterinflater=(LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
  2. LinearLayoutparent=(LinearLayout)inflater.inflate(R.layout.main,null);
  3. ImageViewchild=(ImageView)parent.findViewById(R.id.child);
  4. setContentView(parent);

LayoutInflater 为布局填充类,不明白的可以自己查,或者有机会我将在博客中介绍一下,然后是将 main.xml 文件 inflate LinearLayout 文件,再得到 child ,即 ImageView 。然后就是通过调用 setContentView(parent) 将这个布局 main.xml 显示出来,这时得到的效果和仅使用 s etContentView(R.layout.main) 这句代码得到的效果一样。

下面的操作将会出现异常了,大家注意:

[java] view plain copy
  1. setContentView(child);
也就是将上文setContentView(parent) ,中的 parent 换成 child 。异常请看如下截图:

而这时在异常中它提示要再parent中调用removeView()。这里我们就听从指挥,在setContentView(child),之前添上一句parent.removeView(child),这时就不会再调用setContentView(child)就不会异常了,当然当前显示的将只是一幅图片了,而这时如果你调用setContentView(parent)的话将只显示文本内容,因为我们已经将childremove掉了嘛。

参考:http://blog.csdn.net/yaolingrui/article/details/7339913

更多相关文章

  1. 大话企业级Android应用开发实战 音乐播放器的开发
  2. Android使用gradle的管理本地Maven服务器
  3. 【Android】使用v7.widget.GridLayout做九宫格。
  4. Android(安卓)相对布局中的 代码中修改属性与布局文件的设置不同
  5. Android学习笔记(二)——Android的数据存储(一)SharedPreferences
  6. Android(安卓)WebView 踩过的坑
  7. Android学习过程中问题记录
  8. Fragment使用
  9. Android(安卓)N 各种ANR的时间

随机推荐

  1. Android(安卓)sqlite 使用框架
  2. Android Jetpack之CameraX使用
  3. 我的Android之旅——学习、项目、心态
  4. Android 定位不依赖三方sdk
  5. Google 正在悄悄解决 Android 的碎片化
  6. Android应用程序的开发
  7. Android(安卓)Studio Wear Demo
  8. Android(安卓)入门第四讲04-小结-Recycle
  9. Android小项目之十二 设置中心的界面
  10. Android(安卓)Activity(活动)