android - RecyclerView.Adapter。重写的方法 onCreateViewHolder 参数在 viewType 参数中始终为零
问题描述
我想用多种视图类型制作 RecyclerView。就像在这个主题中一样:链接。
我理解这种方法的本质是方法getItemViewType(position: Int): Int{}。
这个viewType告诉onCreateViewHolder(parent: 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)
}
}
}
解决方案
不要问我为什么。onCreateViewHolder必须返回RecyclerView.ViewHolder而不是 RecyclerView.ViewHolder implementation,然后 viewType 参数将从 getItemViewType(position: 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"
推荐阅读
- c++ - What causes so big performance difference between two ways of building vector of static_vectors?
- python - Convert dict into String and then split specific portion of string
- azure-application-insights - Application Insights - How to search by some properties in custom dimension
- bash - linux期望在后台
- python - Matplotlib 将一些字符绘制为空白方块
- css - 如何创建卡片悬停背景颜色
- excel - 当我使用参数调用另一个子时,它会在我的原始工作表中执行操作,而不是在新创建的工作表中执行
- android - 使用库时未显示事件
- java - 我如何摆脱这个用户说是的无限循环,然后它会回到第一个 while 循环,直到用户说不?
- java - 如何摆脱第二个参数?