Проверьте, прокручивается ли RecyclerView сверху (findFirstCompletelyVisibleItemPosition не будет работать)

Как я могу проверить, прокручивается ли представление переработчика к его вершине (начало списка), не используя findFirstCompletelyVisibleItemPosition?

Объяснение: я не могу использовать этот метод, потому что элементы на RecyclerView большие и иногда никогда не будут "полностью видимыми", поэтому метод вернет -1 (RecyclerView.NO_POSITION)

Мне нужно знать это, чтобы запустить действие только тогда, когда вид переработчика достигнет своей вершины.

 val manager = timelineRecyclerView?.layoutManager as StaggeredGridLayoutManager
 val visibles = manager.findFirstCompletelyVisibleItemPositions(null)

Решено: Включая некоторый код, чтобы помочь

    timelineRecyclerView.addOnScrollListener(object:RecyclerView.OnScrollListener() {
        override fun onScrollStateChanged(recyclerView:RecyclerView,
                                 newState:Int) {
            super.onScrollStateChanged(recyclerView, newState)

        }
        override fun onScrolled(recyclerView:RecyclerView, dx:Int, dy:Int) {
            super.onScrolled(recyclerView, dx, dy)

            currentTimelinePosition += dy

            Log.wtf("position", currentTimelinePosition.toString())
            //if the timeline position is on its start, allow swipe and refresh
            swipeLayout.isEnabled = currentTimelinePosition == 0
        }
    })

1 ответ

Решение

Вы могли бы создать RecyclerView.OnScrollListenerи отслеживать, сколько он прокрутил.

Например, все, что вам нужно сделать, это сохранить переменную и обновить ее с помощью OnScroll на основе суммы вертикальной прокрутки.

class MyScrollListener() : RecyclerView.OnScrollListener() {

    var currentScrollPosition = 0

    override fun onScrolled(view: RecyclerView, dx: Int, dy: Int) {
        currentScrollPosition += dy

        if( currentScrollPosition == 0 ) {
            // We're at the top
        }
    }
}
Другие вопросы по тегам