android LayoutInflater.inflate()方法的奇怪行为

wbrvyc0a  于 2022-12-25  发布在  Android
关注(0)|答案(1)|浏览(130)

我尝试使用linearLayout和scrollview实现一个简单的列表,所以基本上是有一个模型列表,并手动膨胀项目布局。用数据填充它们,然后添加到LinearLayout,这在理论上是好的,但当我这样做时:

//for (item : List) addModelToView(item)
private fun addModelToView(model: Model) {
    val linearLayout = binding.linearContainer
    val item = activity?.layoutInflater?.inflate(R.layout.model_layout,linearLayout, true)
    item?.findViewById<TextView>(R.id.textView10)?.text = model.name
    item?.findViewById<TextView>(R.id.textView11)?.text = model.company
    item?.findViewById<TextView>(R.id.textView12)?.text = model.size.toString()
}

但这样做只会正确显示Last项,而其余项都在那里,但使用xml布局的默认值。如下所示

我尝试过手动扩展条目布局,并将ViewGroup.addView()方法与LayoutParams结合使用,效果很好,但我看不出这两种方法有什么不同

sf6xfgos

sf6xfgos1#

您的问题是layoutInflater.inflate()的返回值。
当你提供root并将attachToRoot设置为true时,它返回根本身,而不是新创建的视图,这使得你的view.findViewById本质上是linearLayout.findViewById,它总是找到并返回第一组视图,不管你执行膨胀操作多少次。

相关问题