Потратил несколько часов, пытаясь сделать простую вещь. Есть:
1. ViewPager
2. адаптер, полученный на базе FragmentPagerAdapter
3. какой-то набор данных в виде списка.
Адаптер из этого списка умеет создавать объекты-фрагменты, а viewPager их показывает.
Интересность в том, что набор данных может меняться в то время, когда viewPager активен - следовательно, нужно изменять и отображаемые в нём данные.
Тут началось самое интересное. После изменения набора данных я пытался:
1. создавать новый адаптер на основании нового набора данных и присваивать его viewPager посредством вызова setAdapter
2. использовать существующей адаптер и вызывать его метод notifyDataSetChanged()
Результат в каждом из вариантов не радовал - либо viewPager начинал дублировать существующие страницы, либо отображать те, данные по которым уже были удалены.
Оказалось, что всё проще - в случае, если набор данных может меняться, правильно использовать FragmentStatePagerAdapter. Этот адаптер не создаёт все элементы сразу, а делает это по необходимости. При этом нормально решается проблема с динамически меняющимся содержимым.
1. ViewPager
2. адаптер, полученный на базе FragmentPagerAdapter
3. какой-то набор данных в виде списка.
Адаптер из этого списка умеет создавать объекты-фрагменты, а viewPager их показывает.
Интересность в том, что набор данных может меняться в то время, когда viewPager активен - следовательно, нужно изменять и отображаемые в нём данные.
Тут началось самое интересное. После изменения набора данных я пытался:
1. создавать новый адаптер на основании нового набора данных и присваивать его viewPager посредством вызова setAdapter
2. использовать существующей адаптер и вызывать его метод notifyDataSetChanged()
Результат в каждом из вариантов не радовал - либо viewPager начинал дублировать существующие страницы, либо отображать те, данные по которым уже были удалены.
Оказалось, что всё проще - в случае, если набор данных может меняться, правильно использовать FragmentStatePagerAdapter. Этот адаптер не создаёт все элементы сразу, а делает это по необходимости. При этом нормально решается проблема с динамически меняющимся содержимым.
Комментариев нет:
Отправить комментарий