0

I want to make RecyclerView with multiple view types. Like in this topic: link.

I understand essential of this approach is method getItemViewType(position: Int): Int{}.

This viewType tells onCreateViewHolder(parent: ViewGroup, viewType: Int) which one of two holder to create. In a test project everything works well.

But in this particular RecyclerView Adapter, method onCreateViewHolder always get zero. Even if I set viewType hard way like this override.

fun getItemViewType(position: Int): Int { return 100 }

I'll be glad any clue. This is my code:

    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)
        }
    }
}
Jason Aller
  • 3,541
  • 28
  • 38
  • 38
snailp4el
  • 153
  • 1
  • 15

1 Answers1

0

Do not ask my why. onCreateViewHolder must return RecyclerView.ViewHolder but not RecyclerView.ViewHolder implementation, then viewType argument will get viewType from getItemViewType(position: Int)

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"
snailp4el
  • 153
  • 1
  • 15