zoukankan      html  css  js  c++  java
  • 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为空,方法直接返回子Viewxml代表的子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。


  • 相关阅读:
    hdu 4308(bfs)
    数位dp
    hdu 4548(素数打表)
    不要把时间浪费在QQ上
    用插值方法构造多项式证明中值问题
    《摩诃般若波罗蜜多心经》 玄奘 译
    证明高斯引理
    《摩诃般若波罗蜜多心经》 玄奘 译
    若一整系数$n$次多项式在有理数域可约,则总可以分解成次数小于$n$的两整系数多项式之积.
    用teamviewer控制内网计算机
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/5159797.html
Copyright © 2011-2022 走看看