Я использую Viewpager
с FragmentPagerAdapter
, чтобы добавлять и удалять страницы. На каждой странице отображаются данные, полученные из Интернета.
По мере добавления новой страницы с этой страницей связан новый фрагмент. Данные получены через AsyncTask и отображаются во Фрагменте. Когда пользователь выбирает удаление страницы, идея состоит в том, чтобы уничтожить страницу и связанный с ней фрагмент.
В общем, все это хорошо работает. Проблема, которую я вижу, следующая:
-
У вас есть три страницы с данными:
[Страница 1] [Страница 2] [Страница 3]
-
Вы удаляете любую страницу, отличную от последней, например, стр. 2; Исчезает по желанию:
[Страница 1] [Страница 3]
-
Вы добавляете новую страницу; но вместо пустой новой страницы на новой странице отображаются данные (вид) со страницы 3.
[Страница 1] [Страница 3] [Страница 4, но показ представления/данных Page 3, должен быть пустым]
Код удаления страницы в моей деятельности выглядит следующим образом:
// Destroy fragment for this page
DataListFragment curFrag = getFragmentByName(currentPage);
FragmentManager fm = getSupportFragmentManager();
fm.beginTransaction().remove(curFrag).commit();
fm.executePendingTransactions();
curFrag = null;
// Remove page and update adapter
mPageTitles.remove(position);
mAdapter.notifyDataSetChanged();
Используя отладчик, он показывает, что фрагмент удаляется из FragmentManager
после вызова executePendingTransactions()
. Но в вызове FrampePagerAdapters
mAdapter.notifyDataSetChanged()
фрагмент добавляется обратно, а затем отображается при создании новой страницы.
Я попытался использовать FrameStatePagerAdapter, так как это должно позволить уничтожить фрагменты, но это не сработало. В моем методе FragmentPagerAdapter getItemPosition()
я использую return FragmentAdapter.POSITION_NONE;
, как указано в другой статье SO, с которой я столкнулся.
Кажется, что представление для этой страницы не уничтожено, а затем добавлено обратно на новую страницу. Я попытался использовать метод removeViewAt()
в представлении новой страницы, но это не сработало.
Будучи новичком в этом, я уверен, что мне не хватает чего-то очевидного...