У меня горизонтальный вид переработчика, а внутри каждого держателя есть вложенный вертикальный вид переработчика.Пользователь может прокручивать вложенный вид переработчика.Мне нужно обновлять горизонтальное представление рециркулятора или некоторые его виды каждые 5-10 секунд и сохранять точное положение прокрутки вложенных рециклеров.
Основная проблема заключается в том, что в функции onViewRecycled (holder ...) держатель.adapterPosition всегда равно -1.Не важно что.
Сохранить состояние прокрутки во вложенном RecyclerView
Я уже пробовал это решение, но оно не работает, потому что я продолжаю получать holder.adapterPositon == -1 внутри onViewRecycled (держатель ...)
class ExampleStackOverflowAdapter(private var list: MutableList<ReceiptObject>) : RecyclerView.Adapter<KitchenReceiptUpperViewHolder>() {
private lateinit var mContext: Context
private lateinit var mViewPool: RecyclerView.RecycledViewPool
var listener: KitchenReceiptUpperAdapterListener? = null
private val mPositionsMap = mutableMapOf<Int, Int>()
override fun onCreateViewHolder(parent: ViewGroup, position: Int): KitchenReceiptUpperViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.holder_kitchen_item_upper, parent, false)
mContext = parent.context
mViewPool = RecyclerView.RecycledViewPool()
return KitchenReceiptUpperViewHolder(view)
}
override fun onBindViewHolder(holder: KitchenReceiptUpperViewHolder, position: Int) {
val item = list[position]
(Setting some views...)
val insideLayoutManager = ErrorHandlingLinearLayoutManager(mContext, LinearLayoutManager.VERTICAL, false)
insideLayoutManager.initialPrefetchItemCount = 5
holder.kitchenReceiptList.apply {
layoutManager = insideLayoutManager
setRecycledViewPool(mViewPool)
val insideAdapter = KitchenReceiptsUpperInnerAdapter(item.items, mContext)
insideAdapter.onItemClicked = { innerPosition, innerItem ->
listener?.onInnerItemClicked(holder.adapterPosition, innerPosition, innerItem)
}
adapter = insideAdapter
clearOnScrollListeners()
}
holder.kitchenReceiptList.post {
holder.kitchenReceiptList.addOnScrollListener(object : RecyclerView.OnScrollListener() {
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
super.onScrolled(recyclerView, dx, dy)
(Some code ...)
}
})
holder.kitchenReceiptList.scrollY = mPositionsMap[holder.adapterPosition] ?: 0
}
}
override fun onViewRecycled(holder: KitchenReceiptUpperViewHolder) {
mPositionsMap[holder.adapterPosition] = holder.kitchenReceiptList.scrollY
super.onViewRecycled(holder)
}
override fun getItemCount(): Int {
return list.size
}
}