Я создаю простое приложение галереи. Изображения синхронизируются с сервером. Теперь у меня есть простой 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)
...
...
...
<adapter>.notifyDataSetChanged()
после каждого изменения в массиве. 06.08.2015album id
или аналогичный 2-му фрагменту из первого фрагмента. Этот подход лучше, потому что, если в будущем вы добавите 3-й фрагмент и захотите загрузить оттуда 2-й фрагмент, вам не нужно дублировать код загрузки данных. 07.08.2015