Проверьте, прокручивается ли 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
}
}
}