Android layoutInflate.inflate 方法详解,removeView()错误解决

错误:

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。

时间: 2024-10-23 19:18:10

Android layoutInflate.inflate 方法详解,removeView()错误解决的相关文章

Android工程:引用另一个Android工程的方法详解

本篇文章是对在Android中引用另一个Android工程的方法进行了详细的分析介绍.需要的朋友参考下 现在已经有了一个Android工程A.我们想扩展A的功能,但是不想在A的基础上做开发,于是新建了另外一个Android工程B,想在B中引用A. 一个思路是把工程A做成纯Jar包,这样其他的工程就可以直接引用了. 但是,如果在工程A中用了R.java中的引用,则无法打成jar包了.原因是R.java是自动生成的,是动态的,每次编译都是不相同的.如果一定要做成jar包,就不能使用自动生成的R文件,

Android编程之LayoutInflater的inflate方法详解

LayoutInflater的inflate方法,在fragment的onCreateView方法中经常用到: public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { LayoutInflater的inflate方法一共有四种,但我们日常用经常用到的就只有这两种: public View inflate(int resource, ViewGroup r

Android layoutInflate.inflate 方法具体解释,removeView()错误解决

错误: The specified child already has a parent. You must call removeView(). 解答: 这个错误非常直白,就是你viewGroup.addView(childView); 中childView已经有父View了.错误原因非常多,我主要讲下 mLayoutInflater.inflate(id, rootView, false);造成的这个错误.(该方法有两种.一种是2个參数,一种是3个參数). 2个參数: 第一个參数:layou

Android网络访问方法详解

大多数的Android应用程序都会使用HTTP协议来发送和接收网络数据,而Android中主要提供了两种方式来进行HTTP操作, HttpURLConnection和HttpClient.这两种方式都支持HTTPS协议.以流的形式进行上传和下载.配置超时时间.IPv6.以及连接池等功能. 一 : 首先来看一下Android下提供的网络访问相关API a) java.net.*(标准的Java接口):包括流和数据包(datagram)sockets.Internet 协议和常见 HTTP 处理.H

android中Drawable方法详解

1. BitmapDrawable相关方法: 新建在drawable目录下面,示例如下: <bitmap xmlns:android="http://schemas.android.com/apk/res/android" android:antialias="true" android:dither="true" android:filter="true" android:gravity="center&qu

Android fragment onHiddenChanged方法详解

项目中,为了实现不同fragment之间值得传递,首先想到的是利用bundle或者shareprefercnce之类的共享数据机制,当不符合项目需求,有点过于复杂和冗余,就利用网上一位前辈的建议,在主Activity中,创建一个共享的数据变量,在其他fragment中只要获取到这个值就可以得到数据,实现共享,代码如下: 主activity定义一个共享数据变量: private String instrName; public String getInstrName() { return inst

Android——onCreate( )方法详解(转)

android开发之onCreate( )方法详解 onCreate( )方法是android应用程序中最常见的方法之一,那么,我们在使用onCreate()方法的时候应该注意哪些问题呢? 先看看Google Android Developers官网上的解释: onCreate(Bundle) is where you initialize your activity. Most importantly, here you will usually call setContentView(int

Android应用盈利广告平台的嵌入方法详解

一.如何学习Android   android开发(这里不提platform和底层驱动)你需要对Java有个良好的基础,一般我们用Eclipse作为开发工具.对于过多的具体知识详细介绍我这里不展开,我只说我个人的学习方法和本人以为的好的步骤.   1.搭建环境:包括对Java和Eclipse及模拟器(有真机再好不过)的熟悉,对于android的tools和adb命令可以放到后面熟悉了解.   2.从helloworld开始:了解一个基本的android应用代码包含哪些,各部分做什么用.(这里只要

Android ActionBar 关于tab的应用 以及 TabListener的方法详解

actionBar的tab标签应用以及TabListener的方法详解 package com.example.actionBarTest.actionBarTab; import android.app.*; import android.os.Bundle; import com.example.actionBarTest.R; import java.util.ArrayList; import java.util.List; /** * Created by Heyiyong on 20