【问题标题】:FragmentStatePagerAdapter getCount() is not called未调用 FragmentStatePagerAdapter getCount()
【发布时间】:2013-12-24 16:21:33
【问题描述】:

我在我的应用程序中使用 FragmentStatePagerAdapter。 我的问题是,当我执行 notifyDataSetChanged() 时,它只调用 getCount() 而不是 getItem()。 getCount 不返回 0。 这是我的 FragmentStatePagerAdapter:

private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {

    public ScreenSlidePagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return titles.get(position);
    }

    @Override
    public Fragment getItem(int position) {
        return fragmentList.get(position);
    }

    @Override
    public int getCount() {
        return fragmentList.size();
    }
}

怎么可能在pagerAdapter.notifyDataSetChanged(); 之后只调用了getCount() 而在它之后没有调用getItem(int position)? 谢谢!

【问题讨论】:

  • 片段列表有什么真正的变化吗?如果不是,则不应调用 getItem()。 getCount() 被调用只是第一次检查大小是否改变的例行调用。
  • getItem() 怎么知道有没有变化?!无论如何,fragmentList 的大小都在变化……
  • 一旦发生更改并且需要填充这些更改,就会调用 get item。这就是我的意思。
  • 好的,但正如我所说,fragmentList 正在改变
  • 你是替换旧的还是添加新的?

标签: android notifydatasetchanged fragmentstatepageradapter


【解决方案1】:

Issue 19001发现int getItemPosition(Object object)需要在FragmentStatePageAdapter子类中实现。默认情况下,假定此方法返回 POSITION_UNCHANGED,这不会触发 getItem 被调用。但是,当我实现return POSITION_NONE 以外的任何内容时,我也遇到了问题(android 支持库中可能存在错误)。

来自我的适配器的片段:

@Override
public Fragment getItem(int position) {
    return DiceRollerFragment.instantiate(position);
}

【讨论】:

    猜你喜欢
    • 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
    相关资源
    最近更新 更多