caipivara
7/15/2016 - 4:00 AM

Android / Kotlin - Scroll recycler view automatically based on initial items and scroll to bottom on new items (like a chat room)

Android / Kotlin - Scroll recycler view automatically based on initial items and scroll to bottom on new items (like a chat room)

class ScrollToTopDataObserver(val layoutManager: LinearLayoutManager,
                              val recyclerView: RecyclerView)
: RecyclerView.AdapterDataObserver() {
  override fun onItemRangeInserted(positionStart: Int, itemCount: Int) {
    super.onItemRangeInserted(positionStart, itemCount)
    val lastVisiblePosition = layoutManager.findLastCompletelyVisibleItemPosition()

    // If the recycler view is initially being loaded or the user is at the bottom of the
    // list, scroll to the bottom of the list to show the newly added message.
    if (lastVisiblePosition == -1 || positionStart >= itemCount - 1 && lastVisiblePosition == positionStart - 1) {
      recyclerView.scrollToPosition(positionStart)
    }
  }
}