【问题标题】:findFirstVisibleItemPosition() always returned -1findFirstVisibleItemPosition() 总是返回 -1
【发布时间】:2021-04-03 12:56:21
【问题描述】:

我试图找到这是我在recyclerview 中显示的第一个项目或没有。 我使用findFirstVisibleItemPosition(),但当我滚动recyclerview 时它总是返回-1。 我在viewpager 中使用recyclerview

val linearLayoutManager =
        LinearLayoutManager(container.context, LinearLayoutManager.VERTICAL, false)
    recCafeList = binding.recCafeList

    recCafeList.layoutManager = linearLayoutManager
    recCafeList.adapter = mAdapter

    val po = linearLayoutManager.findFirstVisibleItemPosition()
    val po2 = linearLayoutManager.findFirstCompletelyVisibleItemPosition()

    recCafeList.setOnScrollListener(object : RecyclerView.OnScrollListener() {
        
        override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
            super.onScrolled(recyclerView, dx, dy)
            Log.i("scrollListener", "$po //// $po2")
        }

    })

Logcat:

I/scrollListener: -1 //// -1
I/scrollListener: -1 //// -1
I/scrollListener: -1 //// -1
I/scrollListener: -1 //// -1
I/scrollListener: -1 //// -1
I/scrollListener: -1 //// -1
I/scrollListener: -1 //// -1
I/scrollListener: -1 //// -1
I/scrollListener: -1 //// -1
I/scrollListener: -1 //// -1
I/scrollListener: -1 //// -1
I/scrollListener: -1 //// -1
I/scrollListener: -1 //// -1

【问题讨论】:

    标签: android android-studio android-recyclerview


    【解决方案1】:

    问题是您最初仅存储 linearLayoutManager.findFirstVisibleItemPosition() 和 linearLayoutManager.findFirstCompletelyVisibleItemPosition() 的值,然后将其记录在 setOnScrollListener 中。

    相反,这是你应该做的。

    val linearLayoutManager =
        LinearLayoutManager(container.context, LinearLayoutManager.VERTICAL, false)
    recCafeList = binding.recCafeList
    
    recCafeList.layoutManager = linearLayoutManager
    recCafeList.adapter = mAdapter
    
    recCafeList.setOnScrollListener(object : RecyclerView.OnScrollListener() {
        
        override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
            super.onScrolled(recyclerView, dx, dy)
    
            val po = linearLayoutManager.findFirstVisibleItemPosition()
            val po2 = linearLayoutManager.findFirstCompletelyVisibleItemPosition()
    
            Log.i("scrollListener", "$po //// $po2")
        }
    
    })
    

    【讨论】:

      【解决方案2】:

      你总是显示相同变量的值而不改变它们的值。

      【讨论】:

        【解决方案3】:

        你必须在 onScrolled 回调方法中调用 linearLayoutManager.findFirstVisibleItemPosition()

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-11-21
          • 2019-10-10
          • 2014-04-13
          • 2017-03-20
          • 2013-11-04
          • 2011-12-09
          • 2012-07-08
          • 1970-01-01
          相关资源
          最近更新 更多