【问题标题】:ViewPager PageAdapter not updating ViewViewPager PagerAdapter 不更新视图
【发布时间】:2011-12-03 17:10:49
【问题描述】:

好的,问题和this post差不多,但是那里的解决方案并没有解决我的问题。

我使用FragmentPagerAdapter 和一个List 持有Fragments,如下所示。

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() 之后。

方法调用流程是这样的。

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

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

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

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

解决更新问题或java.util.ConcurrentModificationException 都会很棒。谢谢你的帮助:)

【问题讨论】:

  • 你好。你能找到解决这个问题的方法吗?我有完全相同的问题,但找不到任何适合我的解决方案:(如果你有什么可行的方法请帮忙!谢谢:)
  • 不,我也没有解决问题。

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


【解决方案1】:

这篇文章有点老了,但以防万一有人碰到这个。我在类似的帖子here 中找到了答案。看起来您走在正确的轨道上,但您需要按照帖子中的建议将 FragmentPagerAdapter 更改为 FragmentStatePagerAdapter 并覆盖 getItemPosition(Object)。

祝你好运。

【讨论】:

  • 谢谢。我试过你的方法,确实有效,但有时还是很奇怪。我认为这是因为我正在尝试删除当前可查看的页面,并且该行为取决于当前页面的位置。我认为这可以通过在删除之前将当前页面切换到屏幕之外来解决,但我没有尝试过。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多