如果达到setOffscreenPageLimit,则位于ViewPager中片段中的Android RecyclerView不会重新加载/刷新视图

如果达到setOffscreenPageLimit,则位于ViewPager中片段中的Android RecyclerView不会重新加载/刷新视图,android,android-fragments,android-viewpager,android-recyclerview,Android,Android Fragments,Android Viewpager,Android Recyclerview,我在片段中有一个回收视图,当我在查看页面之间滑动时,它也在查看页面中,我看到正在调用Fragment的onDetach,但是由于某种原因,RecyclerView仍然存在于ViewPager中片段的特定位置,甚至当我回到分离的片段时,RecyclerView的滚动位置也被保留 我正在使用FragmentStatePagerAdapter作为ViewPager,并从getItemPosition()返回POSITION\u NONE,但它没有任何效果 请帮助我理解这里的问题。这是因为viewpag

我在
片段
中有一个
回收视图
,当我在
查看页面
之间滑动时,它也在
查看页面
中,我看到正在调用
Fragment
onDetach
,但是由于某种原因,
RecyclerView
仍然存在于
ViewPager
片段的
特定位置,甚至当我回到分离的片段时,
RecyclerView
的滚动位置也被保留

我正在使用
FragmentStatePagerAdapter
作为
ViewPager
,并从
getItemPosition()
返回
POSITION\u NONE
,但它没有任何效果


请帮助我理解这里的问题。

这是因为viewpager使用了缓存机制。 阅读本文:


碎片StatePageRadapter
保存状态并销毁碎片;它还恢复重新创建片段时的状态,从而恢复recycleview的状态(滚动位置)

对于最终用户来说,这与使用
FragmentPageAdapter
将片段保存在内存中的行为相同

这是一种正常的、通常需要的行为。

试试这几点

1)
MyAdapter扩展FragmentStatePagerAdapter

2) 使用
getChildFragmentManager()
例如:
mViewPager.setAdapter(新的MyAdapter(getChildFragmentManager(),getActivity(),this))

3) 从ViewPagerRGment
覆盖
setUserVisibleHint
方法

@Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if (isVisibleToUser) {
            //Update Recyclerview
        } else {

        }
    }

我不确定这一点,但我猜FragmentManager有一些缓存功能。已订阅。您的viewpager中有多少页?它是一个无限滚动的viewpager,具有加载更多功能。您可以发布适配器的代码吗?适配器缓存您的片段。您必须删除片段中基于状态的所有内容,或者至少在片段分离后将其重置。这不是正确答案,您应该准备好使用片段中的数据,而不是在用户可见时开始加载。