Jelajahi Sumber

Added scrolling list to the top when new item appears

Vadik Sirekanyan 5 tahun lalu
induk
melakukan
e9c5fd960e

+ 13 - 0
app/src/main/java/com/sirekanyan/knigopis/common/extensions/RecyclerView.kt

@@ -0,0 +1,13 @@
+package com.sirekanyan.knigopis.common.extensions
+
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+
+fun RecyclerView.keepOnTop() {
+    val linearLayoutManager = layoutManager as LinearLayoutManager
+    if (linearLayoutManager.findFirstCompletelyVisibleItemPosition() == 0) {
+        scrollToPosition(0)
+    } else {
+        stopScroll()
+    }
+}

+ 4 - 1
app/src/main/java/com/sirekanyan/knigopis/feature/notes/NotesView.kt

@@ -3,6 +3,7 @@ package com.sirekanyan.knigopis.feature.notes
 import android.view.View
 import com.sirekanyan.knigopis.common.android.recycler.BottomOffsetItemDecoration
 import com.sirekanyan.knigopis.common.extensions.hide
+import com.sirekanyan.knigopis.common.extensions.keepOnTop
 import com.sirekanyan.knigopis.common.extensions.show
 import com.sirekanyan.knigopis.common.functions.handleError
 import com.sirekanyan.knigopis.feature.ProgressView
@@ -40,7 +41,9 @@ class NotesViewImpl(
     override fun updateNotes(notes: List<NoteModel>) {
         notesPlaceholder.show(notes.isEmpty())
         notesErrorPlaceholder.hide()
-        notesAdapter.submitList(notes)
+        notesAdapter.submitList(notes) {
+            notesRecyclerView.keepOnTop()
+        }
         callbacks.onNotesUpdated()
     }
 

+ 4 - 1
app/src/main/java/com/sirekanyan/knigopis/feature/users/UsersView.kt

@@ -6,6 +6,7 @@ import com.sirekanyan.knigopis.common.android.dialog.DialogItem
 import com.sirekanyan.knigopis.common.android.dialog.createDialogItem
 import com.sirekanyan.knigopis.common.android.recycler.BottomOffsetItemDecoration
 import com.sirekanyan.knigopis.common.extensions.hide
+import com.sirekanyan.knigopis.common.extensions.keepOnTop
 import com.sirekanyan.knigopis.common.extensions.show
 import com.sirekanyan.knigopis.common.functions.handleError
 import com.sirekanyan.knigopis.feature.ProgressView
@@ -48,7 +49,9 @@ class UsersViewImpl(
     override fun updateUsers(users: List<UserModel>) {
         usersPlaceholder.show(users.isEmpty())
         usersErrorPlaceholder.hide()
-        usersAdapter.submitList(users)
+        usersAdapter.submitList(users) {
+            usersRecyclerView.keepOnTop()
+        }
         callbacks.onUsersUpdated()
     }