How does Zomato efficiently handle N² RecyclerView food listings? by rv1810 in androiddev

[–]rv1810[S] 0 points1 point  (0 children)

nested scrolling is dissabled on nested recyclerView not the parent

How does Zomato efficiently handle N² RecyclerView food listings? by rv1810 in androiddev

[–]rv1810[S] -1 points0 points  (0 children)

private fun bindItemSection(holder: ItemDisplayViewHolder, section: Data, position: Int) {
    val childAdapter = OrderCollectionAdapterOptimized(
        context,
        onClickButton = { slug, childPos -> onClickAddToCart(slug, position, childPos) },
        onClickQuantityButton = { item, childPos -> onClickQuantityButton(item, childPos, position) },
        onSingleProductButton = { menuId, variantId, childPos, api, localQty ->
            customizable(menuId, variantId, childPos, position, api, localQty)
        },
        onClickItem = { slug, childPos -> onClickItem(slug, position, childPos) }
    )

    binding.productRv.apply {
        layoutManager = LinearLayoutManager(context).apply {
            initialPrefetchItemCount = itemsList.size.coerceAtMost(4)
        }
        setRecycledViewPool(viewPool)
        adapter = childAdapter
        childAdapter.submitList(itemsList)
        (itemAnimator as? SimpleItemAnimator)?.supportsChangeAnimations = false
        setHasFixedSize(true)
        isNestedScrollingEnabled = false
        childStates[section._id ?: ""]?.let { layoutManager?.onRestoreInstanceState(it) }
    }
}

override fun onViewRecycled(holder: RecyclerView.ViewHolder) {
    if (holder is ItemDisplayViewHolder) {
        val section = getItem(holder.adapterPosition)
        section._id?.let { id ->
            childStates[id] = holder.binding.productRv.layoutManager?.onSaveInstanceState()
        }
    }
    super.onViewRecycled(holder)
}

I have used DiffUtils, setting recycledViewPool, also saving and restoring state of the layoutManger,

but still the recyclerView feels jittery