Домагаємося плавного прокручування списків уAndroid
На щастя, проблема низької швидкості прокручування списків в Android цілком вирішувана. Потрібно тільки не пускати все на самоплив, а прикласти руки та голову. Якщо розібратися, iOS розробники теж змушені витрачати час на оптимізацію списків, щоб досягти гладкої прокрутки, просто на Android оптимізація виглядає трохи складніше.
Коли ви займаєтеся оптимізацією додатків Android, потрібно пам'ятати кілька ключових моментів:
- Створення нового об'єкта є дуже повільною операцією.
- Надто частий виклик findViewBy > Нижче я наведу два прийоми, які допоможуть Вам оптимізувати свої списки.
Перший спосіб оптимізація широко поширений і ним користуються всі більш-менш грамотні Android розробники. Він полягає у використанні View Holder-а, що зменшує кількість об'єктів, які необхідно створити для списку прокручування, і виключає виклик декількох повільних функцій інтерфейсу користувача. Використання View Holder-а дозволить вам на 100% підвищити продуктивність прокручування. Хороший приклад роботи з View Holder-ом наведено тут.
Для того, щоб реалізувати цю ідею Вам потрібно додати логічну змінну isScrolling до Вашого адаптера. Якщо параметр scrollState не дорівнює нулю (відбувається прокручування), потрібно встановити цю змінну true. Після того, як прокручування закінчилося, scrollState приймає значення 0, і Ви повинні змусити адаптер перемалювати всі рядки, щоб показати докладну інформацію. Для цього встановлюємо прапорець isScrolling в false і викликаємо метод notifyDataSetChanged().
Цей код потрібно додати до методу listView.getView(). В адаптері залежно від значення змінної isScrolling потрібно відображати або не відображати вміст рядків.