layoutinflater的三种inflate用法

LayoutInflater的用法总结

一、获得LayoutInflater实例的3中方法
  • 通过activity中的getLayoutInflater();
  • 通过LayoutInflater.from(context);
  • 通过(LayoutInflater)getSystemService
    (Context.LAYOUT_INFLATER_SERVICE);
二、inflate参数的含义解析

大神详细解析文章:http://blog.csdn.net/lmj623565791/article/details/38171465

inflate(int resource, ViewGroup root, boolean attachToRoot);
  • ==inflate(int resource,null);==
    是找到此xml布局文件,返回的就是此xml布局的view。不能正确的处理view其宽高,是因为是相对于父布局设置的宽高,但是root为null,故不能正确设置其view的宽高。
  • ==inflate(int resource,root,false)==
    将此xml布局添加到root中,也就是root作为其父布局,因为第三个参数attachToRoot为false,故只把其父布局root的LayoutParamas参数传递,而不将xml布局添加到root中,返回的就是一个带有父布局LayoutParamas参数的xml布局的view。
  • ==inflate(int resource,root,true)==
    为true时当然就是把xml布局添加到root中,并且返回root布局的view。
  • ==inflate(int resource,root)==
    查看源码可知:
    public View inflate(int resource, ViewGroup root) {
        return inflate(resource, root, root != null);
    }

其实他使用的就是inflate三个参数的方法,当root=null时,和第一种方法一样,root!=null时,和第三种的true时一样。


==注意==:
- listview中,我们重写适配器的getview方法时,inflate(resourceID,root,attachToRoot),其中attachToRoot不能为true(因为系统已经帮我们加到父布局了),否则会报错。

一般使用inflater.inflate(R.layout.fragment1, null);

10-25 18:42:07.979: E/AndroidRuntime(6023): java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.


  • fragment的oncreateView中的inflate也不能为true

一般使用inflater.inflate(R.layout.fragment1, container,false);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值