From ca4a3e2f74aad763a21a2a7f43b9b2c8f179ec90 Mon Sep 17 00:00:00 2001 From: Alexander Bakker Date: Sat, 9 Sep 2023 18:26:40 +0200 Subject: [PATCH] Never wrap RecyclerView with a NestedScrollView Wrapping a ``RecyclerView`` with a ``NestedScrollView`` breaks its recycling functionality because the view height is stretched to fit the full list of entries. We never noticed performance issues in these two cases because these lists never get very long. Let's fix these cases anyway so that we don't accidentally base a new use of a ``RecyclerView`` on this broken pattern. Also renamed ``list_slots`` to ``list_groups``. Must have been a copy-paste error. --- .../aegis/ui/GroupManagerActivity.java | 14 ++++++------- .../preferences/IconPacksManagerFragment.java | 6 ++---- app/src/main/res/layout/activity_groups.xml | 20 ++++-------------- .../main/res/layout/fragment_icon_packs.xml | 21 +++---------------- 4 files changed, 16 insertions(+), 45 deletions(-) diff --git a/app/src/main/java/com/beemdevelopment/aegis/ui/GroupManagerActivity.java b/app/src/main/java/com/beemdevelopment/aegis/ui/GroupManagerActivity.java index 74495cac..a894c1a5 100644 --- a/app/src/main/java/com/beemdevelopment/aegis/ui/GroupManagerActivity.java +++ b/app/src/main/java/com/beemdevelopment/aegis/ui/GroupManagerActivity.java @@ -24,7 +24,7 @@ import java.util.Objects; public class GroupManagerActivity extends AegisActivity implements GroupAdapter.Listener { private GroupAdapter _adapter; private HashSet _removedGroups; - private RecyclerView _slotsView; + private RecyclerView _groupsView; private View _emptyStateView; private BackPressHandler _backPressHandler; @@ -51,11 +51,11 @@ public class GroupManagerActivity extends AegisActivity implements GroupAdapter. } _adapter = new GroupAdapter(this); - _slotsView= findViewById(R.id.list_slots); + _groupsView = findViewById(R.id.list_groups); LinearLayoutManager layoutManager = new LinearLayoutManager(this); - _slotsView.setLayoutManager(layoutManager); - _slotsView.setAdapter(_adapter); - _slotsView.setNestedScrollingEnabled(false); + _groupsView.setLayoutManager(layoutManager); + _groupsView.setAdapter(_adapter); + _groupsView.setNestedScrollingEnabled(false); for (String group : _vaultManager.getVault().getGroups()) { _adapter.addGroup(group); @@ -135,10 +135,10 @@ public class GroupManagerActivity extends AegisActivity implements GroupAdapter. private void updateEmptyState() { if (_adapter.getItemCount() > 0) { - _slotsView.setVisibility(View.VISIBLE); + _groupsView.setVisibility(View.VISIBLE); _emptyStateView.setVisibility(View.GONE); } else { - _slotsView.setVisibility(View.GONE); + _groupsView.setVisibility(View.GONE); _emptyStateView.setVisibility(View.VISIBLE); } } diff --git a/app/src/main/java/com/beemdevelopment/aegis/ui/fragments/preferences/IconPacksManagerFragment.java b/app/src/main/java/com/beemdevelopment/aegis/ui/fragments/preferences/IconPacksManagerFragment.java index acff93c5..bc38e7f9 100644 --- a/app/src/main/java/com/beemdevelopment/aegis/ui/fragments/preferences/IconPacksManagerFragment.java +++ b/app/src/main/java/com/beemdevelopment/aegis/ui/fragments/preferences/IconPacksManagerFragment.java @@ -44,7 +44,6 @@ public class IconPacksManagerFragment extends Fragment implements IconPackAdapte @Inject VaultManager _vaultManager; - private View _iconPacksView; private RecyclerView _iconPacksRecyclerView; private IconPackAdapter _adapter; private LinearLayout _noIconPacksView; @@ -62,7 +61,6 @@ public class IconPacksManagerFragment extends Fragment implements IconPackAdapte _noIconPacksView = view.findViewById(R.id.vEmptyList); ((TextView) view.findViewById(R.id.txt_no_icon_packs)).setMovementMethod(LinkMovementMethod.getInstance()); - _iconPacksView = view.findViewById(R.id.view_icon_packs); _adapter = new IconPackAdapter(this); _iconPacksRecyclerView = view.findViewById(R.id.list_icon_packs); LinearLayoutManager layoutManager = new LinearLayoutManager(requireContext()); @@ -169,10 +167,10 @@ public class IconPacksManagerFragment extends Fragment implements IconPackAdapte private void updateEmptyState() { if (_adapter.getItemCount() > 0) { - _iconPacksView.setVisibility(View.VISIBLE); + _iconPacksRecyclerView.setVisibility(View.VISIBLE); _noIconPacksView.setVisibility(View.GONE); } else { - _iconPacksView.setVisibility(View.GONE); + _iconPacksRecyclerView.setVisibility(View.GONE); _noIconPacksView.setVisibility(View.VISIBLE); } } diff --git a/app/src/main/res/layout/activity_groups.xml b/app/src/main/res/layout/activity_groups.xml index 427d5e4e..d7cca180 100644 --- a/app/src/main/res/layout/activity_groups.xml +++ b/app/src/main/res/layout/activity_groups.xml @@ -18,23 +18,11 @@ android:background="?attr/colorAppBar" /> - - - - - - - + android:layout_width="match_parent" + app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior" /> - - - - - - - - - + app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior" />