Как лучше обновлять адаптер при загрузке большего количества элементов? - PullRequest
0 голосов
/ 10 июня 2018

У меня есть фрагмент, который отображает канал, и каждый раз, когда пользователь прокручивает адаптер, он обновляется путем вызова метода notifyDataSetChanged в потоке пользовательского интерфейса.

Это эффективный способ обновления адаптера?

вот метод загрузки данных.

 private void Load(final int page) {
   myApollo.getApolloClient().query(GetpopularQuery.builder().page(page).build()).enqueue(new ApolloCall.Callback<GetpopularQuery.Data>() {
       @Override
       public void onResponse(@Nonnull final Response<GetpopularQuery.Data> response) {
           popular.addAll(response.data().Page().media());
           getActivity().runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    adapter.notifyDataSetChanged();
                }
           });
       }`

Ответы [ 2 ]

0 голосов
/ 10 июня 2018

Я думаю, что сейчас самый простой и рекомендуемый способ уведомления адаптера об изменениях набора данных - это DiffUtils.Это дает вам возможность решить, какие элементы изменились, а какие - новые и т. Д. Вам необходимо расширить DiffUtils.Callback и реализовать несколько методов:

class DiffCallback(): DiffUtil.Callback() {
    override fun areItemsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean {

    }

    override fun getOldListSize(): Int {

    }

    override fun getNewListSize(): Int {

    }

    override fun areContentsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean {

    }

}

и настроить DiffUtils для уведомления вашего адаптера:

 val diffUtil = DiffUtil.calculateDiff(DiffCallback(oldElements, newElements))
 oldElements.clear()
 oldElements.addAll(newElements)
 diffUtil.dispatchUpdatesTo(this)
0 голосов
/ 10 июня 2018

Вызов notifyDataSetChanged () в потоке пользовательского интерфейса в порядке, но вы должны загрузить данные в фоновом потоке.Загрузка данных в потоке пользовательского интерфейса может привести к зависанию или аварийному завершению работы приложения, если загрузка данных занимает много времени.В прошлом году Android выпустила архитектурный компонент, называемый Paging Library , чтобы упростить загрузку данных в ваш просмотрщик.Я очень рекомендую прочитать документацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...