Kotlin - проблема обнаружения прокрутки в Recyclerview - PullRequest
0 голосов
/ 20 февраля 2020

Использование приведенного ниже кода для проверки того, достиг ли RecyclerView дна или нет ..

Означает, что последний элемент Recyclerview виден или нет ..

Для этого я гуглил и добавлен Scroll слушатель в Recyclerview.

Используя приведенный ниже код:

MyRecyclerView.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)
           if (!MyRecyclerView.canScrollVertically(1)) {
               Toast.makeText(mContext, "Last", Toast.LENGTH_LONG).show();
           }
       }
   })

Здесь я пытаюсь проверить, достигло ли Recyclerview дна или нет.

Тост не отображается, когда я прокручиваю обзор повторного просмотра до дно.

Но, тост отображается внезапно, когда предметы в обзоре переработчика связываются впервые. Это должно произойти только тогда, когда пользователь прокручивает вверх до нижней части Recyclerview.

В чем может быть проблема? Пожалуйста, руководство. Спасибо.

Ответы [ 2 ]

1 голос
/ 20 февраля 2020

Я думаю, использование RecyclerView.LayoutManager API лучше подойдет для ваших нужд. Вы можете проверить LinearLayoutManager::findLastCompletelyVisibleItemPosition или findLastVisibleItemPosition метод в вашем RecyclerView.OnScrollListener

0 голосов
/ 20 февраля 2020
  rvPlayers?.addOnScrollListener(object : RecyclerView.OnScrollListener() {
        override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
            super.onScrolled(recyclerView, dx, dy)
            if (dy > 0) {
                if (isLastVisable()) {
                   //code here
                }
            }
        }
    })

 private fun isLastVisable(): Boolean {
    val layoutManager = rvPlayers.layoutManager as LinearLayoutManager
    val pos = layoutManager.findLastCompletelyVisibleItemPosition()
    val numItems = adapter.itemCount
    return (pos >= numItems - 1)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...