Использование внешнего ViewBinding в ViewHolder (Android)

Хочется возможно странного: организовать перелистывание статических страниц (отдельные файлы разметки) с помощью ViewPager2, без создания фрагментов. Что-то вроде этого:

class ModbusPageAdapter(private val binding: ViewBinding, private val pages: List<ViewBinding>) : RecyclerView.Adapter<ModbusPageAdapter.ModbusPageHolder>() {

var prevPosition: Int = 0
class ModbusPageHolder(binding: ViewBinding): RecyclerView.ViewHolder(binding.root)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ModbusPageHolder {
    return ModbusPageHolder(binding)
}

override fun getItemCount(): Int {
    return pages.size
}

override fun onBindViewHolder(holder: ModbusPageHolder, position: Int) {
    val page = pages[position]

    pages[prevPosition].root.visibility = View.INVISIBLE
    page.root.visibility = View.VISIBLE
    prevPosition = position

}

}

Т.е. в основном коде создаю основной binding для "контейнера" и список binding-ов для страниц, их передаю в адаптер viewpager-а. Однако это не работает, т.к. holder выбрасывает исключение "ViewHolder views must not be attached when created". Если внутри адаптера использовать не binding, а "надувать" из R.layout, то естественно, объекты внутри viewpager-а и в основном коде будут разными. Так вот: как их всех подружить?


Ответы (1 шт):

Автор решения: Argon-11

Благодаря мастеру woesss удалось разобраться.

Финальный вариант:

class SlidePageAdapter(private val pages: List<ViewBinding>) :
RecyclerView.Adapter<SlidePageAdapter.SlidePageHolder>() {

    override fun getItemViewType(position: Int): Int {
        return position
    }
    class SlidePageHolder(binding: ViewBinding) : RecyclerView.ViewHolder(binding.root)

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SlidePageHolder {
        return SlidePageHolder(pages[viewType])
    }
    override fun getItemCount(): Int {
        return pages.size
    }

    override fun onBindViewHolder(holder: SlidePageHolder, position: Int) {
    }
}

Можно передать список из любого количества биндингов на вьюхи, все работает и не выглядит извращением! Woesss, большое спасибо!

→ Ссылка