notifyDataSetChanged 不适用于 FragmentPagerAdapter
notifyDataSetChanged not work with FragmentPageAdapter
我正在为我的 ViewPager
和 Fragments
使用 FragmentPageAdapter
。每个 Fragment
都包含带有小画廊的适配器。
在一些片段上。 n
位置,我有更改图库的按钮。当我为这个内部适配器更新数据集时,我试图在我的 FragmentPageAdapter
上调用 notifyDataSetChanged()
,但它不会刷新我的视图。
但是如果我切换到 n+2
片段,然后返回到 n
片段,图库会按应有的方式更新。看起来它存储在内存中...
所以问题是:
如何强制 FragmentPageAdapter
仅在 当前 位置(当前可见)片段上重新创建视图?
您应该使用 Viewpager.setOffScreenPageLimit 方法根据您当前的页面来确定查看分页器预先加载的页面数量。是的,您描述的行为非常好——我认为默认金额是 1。我不知道您有多少页,但请尝试将其设置为 2-3,看看它对您有何影响。
干杯!
解决方案是重写 getItemPosition(Object)
和 return POSITION_NONE
。
这会强制 PagerAdapter
通过检查它们在适配器中的位置是否已更改来重新创建您加载的片段。因为它有,并且您正在用 "newer" 片段替换 "old" 片段,您告诉适配器当前片段没有位置,您需要它重新加载应该在那个位置的内容。
我正在为我的 ViewPager
和 Fragments
使用 FragmentPageAdapter
。每个 Fragment
都包含带有小画廊的适配器。
在一些片段上。 n
位置,我有更改图库的按钮。当我为这个内部适配器更新数据集时,我试图在我的 FragmentPageAdapter
上调用 notifyDataSetChanged()
,但它不会刷新我的视图。
但是如果我切换到 n+2
片段,然后返回到 n
片段,图库会按应有的方式更新。看起来它存储在内存中...
所以问题是:
如何强制 FragmentPageAdapter
仅在 当前 位置(当前可见)片段上重新创建视图?
您应该使用 Viewpager.setOffScreenPageLimit 方法根据您当前的页面来确定查看分页器预先加载的页面数量。是的,您描述的行为非常好——我认为默认金额是 1。我不知道您有多少页,但请尝试将其设置为 2-3,看看它对您有何影响。
干杯!
解决方案是重写 getItemPosition(Object)
和 return POSITION_NONE
。
这会强制 PagerAdapter
通过检查它们在适配器中的位置是否已更改来重新创建您加载的片段。因为它有,并且您正在用 "newer" 片段替换 "old" 片段,您告诉适配器当前片段没有位置,您需要它重新加载应该在那个位置的内容。