我尝试使用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
结合使用,效果很好,但我看不出这两种方法有什么不同
1条答案
按热度按时间sf6xfgos1#
您的问题是
layoutInflater.inflate()
的返回值。当你提供root并将
attachToRoot
设置为true时,它返回根本身,而不是新创建的视图,这使得你的view.findViewById
本质上是linearLayout.findViewById
,它总是找到并返回第一组视图,不管你执行膨胀操作多少次。