我尝试在Android中为列表中的每个元素创建一个文本视图,如何为列表中的每个元素动态生成一个文本视图?我尝试过使用for循环来遍历列表,并为每个元素创建一个新的textview,但是我在实现这个过程中遇到了麻烦,任何帮助都将非常感谢。
von4xj4u1#
您通常会使用RecycleView来实现这一点,但在某些情况下,您将手动添加列表。您可以简单地创建TextView并向其添加属性,重要的是要包括LayoutParams,以便可以呈现视图。
val food = listOf("apple", "pie", "banana", "cookie") val linearLayout = findViewById<LinearLayout>(R.id.myList) food.forEach { TextView(this).apply { layoutParams = LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT) text = it linearLayout.addView(this) } }
请记住,LayoutParams需要是各自ViewGroup的嵌套类,因此如果父类是LinearLayout,则应该使用LinearLayout.LayoutParams如果它不是TextView,而是您在自己的XML布局(res/layout/my_custom_row. xml)中定义的视图,则可以对其使用binding:
LayoutParams
LinearLayout
LinearLayout.LayoutParams
MyCustomRowBinding.inflate(layoutInflater, containerLayout, true).apply { nameTextView.text = item.name }
你不需要使用viewGroup.addView(),因为当最后一个参数是true时,inflater已经添加了视图。
viewGroup.addView()
true
1条答案
按热度按时间von4xj4u1#
您通常会使用RecycleView来实现这一点,但在某些情况下,您将手动添加列表。
您可以简单地创建TextView并向其添加属性,重要的是要包括LayoutParams,以便可以呈现视图。
请记住,
LayoutParams
需要是各自ViewGroup的嵌套类,因此如果父类是LinearLayout
,则应该使用LinearLayout.LayoutParams
如果它不是TextView,而是您在自己的XML布局(res/layout/my_custom_row. xml)中定义的视图,则可以对其使用binding:
你不需要使用
viewGroup.addView()
,因为当最后一个参数是true
时,inflater已经添加了视图。