我想要使RecyclerView具有多个视图类型。如本主题所示:link。
我理解这种方法的本质是方法getItemViewType(位置: Int):Int{}。
这个viewType告诉onCreateViewHolder(父级: ViewGroup,viewType: Int)要创建哪一个。在一个测试项目中,一切都很好。
但是在这个特定的RecyclerView适配器中,方法onCreateViewHolder总是得到零。即使我把viewType设置为这样的硬方式。
fun getItemViewType(position: Int): Int { return 100 }
任何线索我都会高兴的。这是我的密码:
class OrdersAdapter(val iAbsListFragment: IAbsListFragment,
val listItemsLD: LiveData<Result<List<Order>>>
) : RecyclerView.Adapter<OrderViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): OrderViewHolder {
viewType
return OrderViewHolder(
LayoutInflater.from(parent.context)
.inflate(R.layout.card_order, parent, false), iAbsListFragment
)
}
override fun getItemViewType(position: Int): Int { return 100 }
override fun getItemCount(): Int {
return if (listItemsLD.value is Result.Success) {
(listItemsLD.value as Result.Success<List<Order>>).data.size
} else {
0
}
}
override fun onBindViewHolder(holder: OrderViewHolder, position: Int) {
if (listItemsLD.value is Result.Success) {
val order = (listItemsLD.value as Result.Success<List<Order>>).data[position]
holder.bindTo(order)
}
}
}
发布于 2021-09-01 05:28:39
别问我为什么。onCreateViewHolder必须返回RecyclerView.ViewHolder,但不能返回RecyclerView.ViewHolder实现,然后viewType参数将从getItemViewType(RecyclerView.ViewHolder: Int)获得viewType。
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): OrderViewHolder //wrong, viewType always zero
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): OrderViewHolder //work well, viewType from "override fun getItemViewType"
https://stackoverflow.com/questions/68997095
复制相似问题