From 94b0b64501da5be8bdbefb237a3193e15ed1b456 Mon Sep 17 00:00:00 2001 From: Fabian Henneke Date: Fri, 27 Mar 2020 10:02:31 +0100 Subject: Fix: Restore store scroll position on back press (#670) Restoring the scroll position in the main store fragment is currently broken since the stored state (recyclerView.verticalScrollbarPosition) is always 0 - it is just an enum that governs where the scrollbar is placed on the screen. The fix is to remember the list position of the last fully visible item and scroll to it when restoring the scroll position. Co-authored-by: Harsh Shandilya --- app/src/main/java/com/zeapo/pwdstore/PasswordFragment.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/zeapo/pwdstore/PasswordFragment.kt b/app/src/main/java/com/zeapo/pwdstore/PasswordFragment.kt index a6c7bc67..52d3881e 100644 --- a/app/src/main/java/com/zeapo/pwdstore/PasswordFragment.kt +++ b/app/src/main/java/com/zeapo/pwdstore/PasswordFragment.kt @@ -123,7 +123,7 @@ class PasswordFragment : Fragment() { ) // push the category were we're going pathStack.push(item.file) - scrollPosition.push(recyclerView.verticalScrollbarPosition) + scrollPosition.push((recyclerView.layoutManager as LinearLayoutManager).findLastCompletelyVisibleItemPosition()) recyclerView.scrollToPosition(0) recyclerAdapter.clear() recyclerAdapter.addAll(getPasswords(item.file, getRepositoryDirectory(context), sortOrder)) @@ -235,7 +235,7 @@ class PasswordFragment : Fragment() { /** Goes back one level back in the path */ fun popBack() { if (passListStack.isEmpty()) return - recyclerView.scrollToPosition(scrollPosition.pop()) + (recyclerView.layoutManager as LinearLayoutManager).scrollToPosition(scrollPosition.pop()) recyclerAdapter.clear() recyclerAdapter.addAll(passListStack.pop()) pathStack.pop() -- cgit v1.2.3