Nano Hash - криптовалюты, майнинг, программирование

java.lang.IllegalStateException: PagerAdapter приложения изменил содержимое адаптера без вызова PagerAdapter#notifyDataSetChanged

Я создаю простое приложение галереи. Изображения синхронизируются с сервером. Теперь у меня есть простой gridView, отображающий изображения, и onClick изображение открывается внутри viewPager. Так же, как галерея Android по умолчанию.

Проблема в-

java.lang.IllegalStateException: The application's PagerAdapter changed the adapter's contents without calling PagerAdapter#notifyDataSetChanged!

Мне нужен способ уведомить адаптер о viewPager из фона. Для загрузки данных в фоновом режиме я использую Koush/Ion.

КЛАСС ImageGrid (сводка)

public class ImageGrid extends Fragment implements HttpConnectCallback, FutureCallback<JsonArray> {
...
..
.
gridView.setOnItemClickListener(CustomListener);
//onClick-> the following code executes

PagerFragment pagerFragment = new PagerFragment().newInstance(position);
...
..
.

Когда PagerFragment активен, загрузка данных все еще продолжается в фоновом режиме.

Класс PagerFragment (краткое описание)

public class PagerFragment extends Fragment {
...
..
.
viewPager = (ViewPager) view.findViewById(R.id.splash_pager);

viewPager.setAdapter(new PagerAdapter);// a PagerAdapter 

Теперь источник изображений для адаптеров обоих классов одинаков. то есть у меня есть static ArrayList<String>, который содержит путь к изображениям на диске.

Теперь, если данные в списке меняются, и я пытаюсь прокрутить viewPager, возникает следующее исключение

java.lang.IllegalStateException: The application's PagerAdapter changed the adapter's contents without calling PagerAdapter#notifyDataSetChanged!
at android.support.v4.view.ViewPager.populate(Unknown Source)
            at android.support.v4.view.ViewPager.populate(Unknown Source)
            at android.support.v4.view.ViewPager.smoothScrollTo(Unknown Source)
            at android.support.v4.view.ViewPager.scrollToItem(Unknown Source)
            at android.support.v4.view.ViewPager.setCurrentItemInternal(Unknown Source)
            at android.support.v4.view.ViewPager.onTouchEvent(Unknown Source)
...
...
...

  • У меня была та же ошибка, и я нашел решение здесь Мое решение 25.08.2015

Ответы:


1

Использование метода clone() для копирования данных из ArrayList, которые я передал конструктору ViewPager's adapter, окончательно решило проблему.

23.07.2015
  • Это плохая практика, на мой честный взгляд. Вместо этого вы должны вызывать <adapter>.notifyDataSetChanged() после каждого изменения в массиве. 06.08.2015
  • У меня есть два фрагмента. Сначала содержит GridView для отображения миниатюр изображений. Теперь onClick загружает другой фрагмент с помощью ViewPager, который отображает изображения так же, как приложение альбома телефона по умолчанию. Разница в том, что данные постоянно обновляются в фоновом режиме, а методы, которые обновляют данные, вызываются из первого фрагмента, который я использую для отображения эскизы. Таким образом, у меня нет доступа к адаптеру класса ViewPager из этого класса. 06.08.2015
  • Ну, вы можете оставить это так, ИЛИ позволить второму фрагменту загрузить данные для себя. Просто передайте album id или аналогичный 2-му фрагменту из первого фрагмента. Этот подход лучше, потому что, если в будущем вы добавите 3-й фрагмент и захотите загрузить оттуда 2-й фрагмент, вам не нужно дублировать код загрузки данных. 07.08.2015
  • Я также хотел сделать это так, как вы предлагаете, но я не могу понять, как уведомить второй фрагмент об изменении набора данных. Я попытался создать интерфейс, который будет уведомлять об изменении набора данных адаптер любого класса, который его реализует, но мне это не удалось, поэтому я использую это как обходной путь. Я думаю, что упускаю что-то важное. Не могли бы вы рассказать мне, как другие приложения обрабатывают асинхронные изменения в базе данных. Как Google фото. 07.08.2015
  • У меня нет опыта именно в этом сценарии. В основном я использую какую-то шину событий (Otto, EventBus) для связи. Никогда не реализовывал это нативным способом, извините. 07.08.2015
  • Я посмотрю на шину событий, это может быть решением. Спасибо 07.08.2015
  • Существует также DataSetObserver. 07.08.2015
  • помог мне решить проблему с глобальным набором данных для адаптера ViewPager. 09.06.2016
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..