listView kotlin 添加不同的动态布局
时间: 2023-11-13 20:06:07 浏览: 124
Android应用源码之android动态添加表格行.zip
要在ListView中添加不同的动态布局,你需要在适配器中重写getView()方法。在该方法中,你可以通过position参数来判断当前的数据项需要使用哪种布局。
以下是一个简单的示例代码,假设我们有两种数据类型:TypeA和TypeB,需要在ListView中显示:
```kotlin
class MyAdapter(private val context: Context, private val data: List<Any>) : BaseAdapter() {
private val TYPE_A = 0
private val TYPE_B = 1
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
var view = convertView
val type = getItemViewType(position)
if (view == null) {
// 根据不同类型加载不同的布局
view = if (type == TYPE_A) {
LayoutInflater.from(context).inflate(R.layout.layout_type_a, parent, false)
} else {
LayoutInflater.from(context).inflate(R.layout.layout_type_b, parent, false)
}
}
// 根据不同类型填充数据
if (type == TYPE_A) {
// 填充 Type A 的数据
val item = data[position] as TypeA
// ...
} else {
// 填充 Type B 的数据
val item = data[position] as TypeB
// ...
}
return view
}
override fun getItem(position: Int): Any {
return data[position]
}
override fun getItemId(position: Int): Long {
return position.toLong()
}
override fun getCount(): Int {
return data.size
}
override fun getItemViewType(position: Int): Int {
// 根据不同数据类型返回不同的类型值
return if (data[position] is TypeA) TYPE_A else TYPE_B
}
override fun getViewTypeCount(): Int {
// 返回布局类型的数量,这里有两种类型
return 2
}
}
```
在上面的代码中,我们首先定义了两个常量TYPE_A和TYPE_B,用于表示不同的布局类型。在getView()方法中,我们根据position参数和getItemViewType()方法的返回值来判断当前数据项需要使用哪种布局。如果convertView为空,则根据不同的类型加载不同的布局。然后在各自的分支中填充数据即可。最后,我们还需要在适配器中重写getItemViewType()和getViewTypeCount()方法,用于返回布局类型和布局类型数量。
阅读全文