пятница, декабря 21, 2012

Как обновить содержимое ViewPager, работающего с FragmentStatePagerAdapter

Потратил несколько часов, пытаясь сделать простую вещь. Есть:
1. ViewPager
2. адаптер, полученный на базе FragmentPagerAdapter
3. какой-то набор данных в виде списка.

Адаптер из этого списка умеет создавать объекты-фрагменты, а viewPager их показывает.

Интересность в том, что набор данных может меняться в то время, когда viewPager активен - следовательно, нужно изменять и отображаемые в нём данные.

Тут началось самое интересное. После изменения набора данных я пытался:
1. создавать новый адаптер на основании нового набора данных и присваивать его viewPager посредством вызова setAdapter
2. использовать существующей адаптер и вызывать его метод notifyDataSetChanged()

Результат в каждом из вариантов не радовал - либо viewPager начинал дублировать существующие страницы, либо отображать те, данные по которым уже были удалены.

Оказалось, что всё проще - в случае, если набор данных может меняться, правильно использовать FragmentStatePagerAdapter. Этот адаптер не создаёт все элементы сразу, а делает это по необходимости. При этом нормально решается проблема с динамически меняющимся содержимым. 

вторник, декабря 11, 2012

Декомпилятор Java

Как-то не доводилось до этого, а тут понадобилось попользоваться декомпилятором Java. Понравился проект Java Decompiler - удобно и красиво получается. Есть отдельное GUI-приложение, а есть плагин для Eclipse.