ViewPager PageAdapter未更新View

时间:2011-12-03 17:10:49

标签: java android facebook android-fragments android-viewpager

好的,问题与this post几乎相同,但那里的解决方案并没有解决我的问题。

我使用FragmentPagerAdapterList持有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.ConcurrentModificationExceptionnotifyDataSetChanged()

方法调用流程是这样的。

  1. ViewPager页面索引1处,点击Dialog打开Button(与Facebook Android示例中的LoginButton相同)
  2. 关闭对话框后的
  3. onAuthSucceed),删除ViewPager页面索引1并添加另一个页面作为页面索引1
  4. 使用notifyDataSetChanged
  5. 强制更新

    在向适配器添加Fragment之前,我尝试了许多其他方法来删除Fragment,但该页面不会更新为新内容。

    我刚找到一种方法让页面空白......

    viewpager.removeViewAt(1);
    viewpagerAdapter.removeItem(1);
    viewpagerAdapter.addItem(1, new Fragment(...));
    

    要么解决更新问题,要么java.util.ConcurrentModificationException会很好。谢谢你的帮助:)

1 个答案:

答案 0 :(得分:2)

这篇文章有点陈旧,但万一有人碰到这个。我在类似的帖子here中找到了答案。看起来你在正确的轨道上,但你需要将FragmentPagerAdapter更改为FragmentStatePagerAdapter并覆盖getItemPosition(Object),如你在帖子中所建议的那样。

祝你好运。