#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"
везде.