Хорошо, проблема почти такая же, как и в этом посте, но решение там не решило мою проблему.
Я использую FragmentPagerAdapter
со List
содержащим Fragment
как показано ниже.
public class ViewPageAdapter extends FragmentPagerAdapter {
private List<Fragment> fragments;
public ViewPagerAdapter(FragmentManager fm, List<Fragment> fragments) {
super(fm);
this.fragments = fragments;
}
@Override
public Fragment getItem(int position) {
return fragments.get(position);
}
@Override
public int getCount() {
return fragments.size();
}
...
}
И мой Fragment
переопределяет метод onCreateView, подобный этому.
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedState) {
return inflater.inflate(theLayoutResourceId, container, false);
}
Если вы используете метод в этом сообщении (переопределите int getItemPosition(Object object)
чтобы вернуть POSITION_NONE
), я получу java.util.ConcurrentModificationException
после вызова notifyDataSetChanged()
.
Поток вызова метода подобен этому.
ViewPager
откройте Dialog
ViewPager
, нажав Button
(точно так же, как LoginButton
в Android-приложении Facebook)onAuthSucceed
), удалите страницу 1 страницы ViewPager
и добавьте другую страницу для индекса страницы 1notifyDataSetChanged
Я попробовал много других способов удалить Fragment
перед добавлением Fragment
в адаптер, но страница не будет обновляться до нового содержимого.
Я просто нашел один способ сделать страницу пустой...
viewpager.removeViewAt(1);
viewpagerAdapter.removeItem(1);
viewpagerAdapter.addItem(1, new Fragment(...));
Либо решение проблемы обновления, либо java.util.ConcurrentModificationException
было бы здорово. Спасибо за вашу помощь :)
Этот пост старый, но на случай, если кто-нибудь столкнется с этим. Я нашел ответ в подобном сообщении здесь. Похоже, что вы на правильном пути, но вам нужно изменить свой FragmentPagerAdapter на FragmentStatePagerAdapter и переопределить getItemPosition (Object), как вы предложили в своем посте.
Удачи вам.