Хорошо, проблема почти такая же, как у этого поста , но решение там не решило мою проблему.
Я использую FragmentPagerAdapter
с List
, держащимFragment
s, как показано ниже.
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
странице индекса 1 откройте Dialog
, нажав Button
(точно так же, как LoginButton
в примере Facebook Android) - после закрытия диалога (
onAuthSucceed
),удалите ViewPager
индекс страницы 1 и добавьте еще одну страницу в индекс индекса 1 - принудительно обновите, используя
notifyDataSetChanged
Я пробовал много других способов удалить Fragment
перед добавлением Fragment
к адаптеру, но страница не будет обновляться до нового содержимого.
Я только что нашел один способ сделать страницу пустой ...
viewpager.removeViewAt(1);
viewpagerAdapter.removeItem(1);
viewpagerAdapter.addItem(1, new Fragment(...));
Или решение проблемы обновления или java.util.ConcurrentModificationException
было бы здорово.Спасибо за вашу помощь:)