Intereting Posts
Android – обновить данные в AlertDialog? Потоковое аудио MP3 через сокетную связь с использованием OpenSL ES на Android Значение верхнего, восхождения, базовой линии, спускового механизма, дна и ведущего в Android FontMetrics Ошибки Android logcat TundConnector и NetlinkEvent Каков тайм-аут по умолчанию использования HttpGet и DefaultHttpClient? Изменение цвета базовой линии EditText на основе его фокуса в android «Отбор не может быть запущен, и нет новых запусков», когда Eclipse для Android Project Dev Android: установите все PendingIntents с помощью AlarmManager VideoView превращается в черный экран Событие нажатия кнопки Android AppWidget, которое не было получено после остановки принудительной остановки дома Как нарисовать круг с радиальным градиентом в холсте? Расписание таймера Android vs scheduleAtFixedRate Получить элемент андроида: versionName в коде Ионный: как отображать ионный элемент на нескольких линиях? Размер кучи Android на разных телефонах / устройствах и версиях ОС

Вставить страницы в середине FragmentPageAdapter

Я использую ViewPager из ViewPageIndicator, и мне нужно иметь возможность динамически вставлять один фрагмент в середине других.

Я попытался управлять моделью с помощью FragmentPagerAdapter и FragmentStatePagerAdapter (как из кода поддержки v4), так и первым, похоже, никак не удается вставить страницы посередине. А второй работает только в том случае, если я наивно реализую getItemPosition, возвращая всегда POSITION_NONE, но это вызывает полное восстановление страниц каждый раз, когда я сажусь.

Проблема, которую я наблюдал с FragmentStatePagerAdapter (FSP), такова:

  • Я начинаю с двух страниц [A] [B]
  • Затем я вставляю [C] в середину [A] [C] [B]. После вставки я вызываю notifyDataSetchange ()
  • Затем FSP вызывает getItemPosition для [A] и получает 0
  • Затем FSP вызывает geTItemPosition для [B] и получает 2. И он говорит … Ohhh Я должен уничтожить [B] и сделать mFragments.set (2, null), а затем, поскольку он имеет только два элемента в массиве mFragments, он бросает Исключение IndexOutOfBoundsException

Немного посмотрев код, кажется, что при условии, что fragStatePagerAdapter не поддерживает вставку посередине. Это правильно или я чего-то не хватает?

Обновление: вставка в адаптере выполнена логически, когда истинное значение кода верно, страницы увеличиваются на единицу. Создание фрагмента выполняется с помощью конструктора в getItem () следующим образом:

void setCondition(boolean condition) { this.condition=condition; notifyDataSetChanged(); } public int getCount(){ return condition?3:2; } public Fragment getItem(int position) { if(position==0) return new A(); else if(position==1) return condition?new C():new B(); else if(position==2 && condition) return new B(); else throw new RuntimeException("Not expected"); } public int getItemPosition(Object object) { if(object instanceof A) return 0; else if(object instanceof B) return condition?2:1; else if(object instanceof C) return 1; } 

Решение:

Как сказано в принятом ответе, ключ заключается в реализации getItemId() .

Убедитесь, что вы используете, по крайней мере, версию библиотеки поддержки android-поддержки R9 (июнь 2012 г.) . Потому что этот метод был добавлен в него. До этой версии этот метод не существует, и адаптер неправильно управляет вставками. Также убедитесь, что вы используете FragmentPageAdapter, потому что FragmentStatePagerAdapter все еще не работает, потому что он не использует идентификаторы.

Solutions Collecting From Web of "Вставить страницы в середине FragmentPageAdapter"