首页 > 解决方案 > 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)
        }
    }
}

标签: androidandroid-recyclerview

解决方案


不要问我为什么。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"

推荐阅读