美文网首页
inflate方法参数意义

inflate方法参数意义

作者: 小院里栽棵树 | 来源:发表于2023-03-26 20:06 被阅读0次
    inflate( int resource, ViewGroup root, boolean attachToRoot)
    
    resource : 资源id
    root :容器
    attachToRoot : 是否添加入容器
    

    再聊每个参数的具体作用之前,我们先看下inflate的几种常用写法

    layoutInflater.inflate(R.layout.xx, null)
    layoutInflater.inflate(R.layout.xx, root, false)
    layoutInflater.inflate(R.layout.xx, root, true)
    

    root是否为空的影响:
    如果root为空,则R.layout.xx根布局的宽高、margin等需要依赖父容器计算出来的值,就都无效了。但像padding这种view自身决定的属性值还是生效的

    attachToRoot:
    true时,inflate返回的view就是root,R.layout.xx布局生成的view会自动添加到root中
    false时,inflate返回的view就是R.layout.xx布局生成的view

    所以在使用attachToRoot = true时,我们要注意下面这种写法

     for (index in 0..5) {
         val view = layoutInflater.inflate(R.layout.xx, root, true)
         val tvContent = view.findViewById<TextView>(R.id.tv_content)
         tvContent.text = index.toString()
     }
    
    这种写法会导致,我们只有一个tvContent被成功赋值了,但text文本是5.
    这和我们的预期完全不同,主要就是因为attachToRoot = true时,我们返回的view是root本身.
    那么我们调用root.findViewById返回的其实就是第一个id相同的控件,
    故而只有第一个tvContent被成功赋值,且值为5
    

    所以如果我们有循环生成布局,且需要填充布局的逻辑时,是不可以使用attachToRoot = true的,建议使用下面的写法

    for (index in 0..5) {
        val view = layoutInflater.inflate(R.layout.xx, root, false)
        val tvContent = view.findViewById<TextView>(R.id.tv_content)
        tvContent.text = index.toString()
        viewBinding.llAttachFalse.addView(view)
    }
    

    相关文章

      网友评论

          本文标题:inflate方法参数意义

          本文链接:https://www.haomeiwen.com/subject/kpcggrtx.html