0

I am trying to access the underlying data from a recyclerview item when it scrolls onto the screen.

I am using onAttachedToRecyclerView() inside my Adapter class. Then get the data within onScrolled().

Here is what I have so far:

    override fun onAttachedToRecyclerView(recyclerView: RecyclerView) {
    super.onAttachedToRecyclerView(recyclerView)
    val manager = recyclerView.layoutManager
    Log.i("ProductAdapter","$manager")
    if (manager is StaggeredGridLayoutManager) {
        val slm: StaggeredGridLayoutManager = manager
        recyclerView.addOnScrollListener(object : RecyclerView.OnScrollListener() {
            override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
                super.onScrolled(recyclerView, dx, dy)
                val firstVisibleItemPosition: Int
                val firstVisibleItemPositions =
                    slm.findFirstVisibleItemPositions(null)
                firstVisibleItemPosition = firstVisibleItemPositions[0]
                if (firstVisibleItemPosition > -1) {
                    val item = getItem(firstVisibleItemPosition))
                    // do stuff with item data
                }
            }
        })
    }else{
        Log.e("ProductAdapter","error")
    }
}

when I set val manager = recyclerView.layoutManager, manager ends up being null. So the first if check never passes. My code is referencing this answer from another question. Any ideas on how to fix this?

Willt42
  • 125
  • 2
  • 10

1 Answers1

0

In my Fragment I was setting the adapter for the recyclerview one line before setting the layout manager.

Code before:

recyclerViewProducts.apply {
            this.adapter = productAdapter
            layoutManager = staggeredGridLayoutManager
            itemAnimator?.changeDuration = 0
        }

Code after:

recyclerViewProducts.apply {
            layoutManager = staggeredGridLayoutManager
            this.adapter = productAdapter
            itemAnimator?.changeDuration = 0
        }

Thanks to cactustictacs

Willt42
  • 125
  • 2
  • 10