好的,问题与this post几乎相同,但那里的解决方案并没有解决我的问题。
我使用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);
}
如果使用this post中的方法(覆盖int getItemPosition(Object object)
返回POSITION_NONE
),我会得到
致电java.util.ConcurrentModificationException
后notifyDataSetChanged()
。
方法调用流程是这样的。
ViewPager
页面索引1处,点击Dialog
打开Button
(与Facebook Android示例中的LoginButton
相同)onAuthSucceed
),删除ViewPager
页面索引1并添加另一个页面作为页面索引1 notifyDataSetChanged
在向适配器添加Fragment
之前,我尝试了许多其他方法来删除Fragment
,但该页面不会更新为新内容。
我刚找到一种方法让页面空白......
viewpager.removeViewAt(1);
viewpagerAdapter.removeItem(1);
viewpagerAdapter.addItem(1, new Fragment(...));
要么解决更新问题,要么java.util.ConcurrentModificationException
会很好。谢谢你的帮助:)
答案 0 :(得分:2)
这篇文章有点陈旧,但万一有人碰到这个。我在类似的帖子here中找到了答案。看起来你在正确的轨道上,但你需要将FragmentPagerAdapter更改为FragmentStatePagerAdapter并覆盖getItemPosition(Object),如你在帖子中所建议的那样。
祝你好运。