PreferenceFragmentCompat влияет на производительность другого фрагмента

#android #android-fragments #android-preferences #preferencefragment #android-motionlayout

#Android #android-фрагменты #android-настройки #preferencefragment #android-motionlayout

Вопрос:

Я следовал руководству Google (https://developer.android.com/guide/topics/ui/settings ) чтобы добавить PreferenceFragmentCompat в мое приложение.

Более того, у меня есть другой фрагмент (фрагмент A), который содержит RecyclerView в MotionLayout. MotionLayout используется для небольшой анимации, которая расширяет RecyclerView до вертикального полноэкранного режима через OnSwipe.

Теперь я решаю следующую проблему: после того, как я вызвал PreferenceFragment и затем вернулся обратно к фрагменту A, производительность анимации MotionLayout OnSwipe действительно низкая / отстающая. Следуя журналам, метод onDraw вызывался несколько раз при пролистывании.

Интересный факт заключается в том, что метод onDraw вызывается только один раз (@onCreate), когда я еще не запустил PreferenceFragment ?!

Более того, вызов произвольного фрагмента X других моих фрагментов не влияет на производительность моего фрагмента A?!

Что может быть причиной этого? Как мне продолжить мое расследование?

Ответ №1:

Ответ был: обычная тема PreferenceFragmentCompat содержала атрибут вертикальной полосы прокрутки. Мой RecyclerView в Fragment A адаптировал этот атрибут, что привело к снижению производительности (из-за перерисовки).

Я исправил это с помощью атрибута scrollbar = none.

Комментарии:

1. У меня была похожая проблема, когда текстовые представления в держателях просмотра моего RecyclerView отображали полосы прокрутки, когда текст был переполнен, после того, как я просмотрел PreferenceFragmentCompat. Исправление заключалось в добавлении android:scrollbars="none" к TextViews.

2. Это также устранило мою проблему, спасибо! Но что я сделал, так это расширил стиль предпочтений, который я использовал PreferenceThemeOverlay.v14.Material , и переопределил android:scrollbars атрибут на быть none , и в моем AppTheme я установил preferenceTheme созданный мной стиль. Этот подход, вероятно, лучше, чем добавление android:scrollbars="none" везде.