ViewPager2 setOffscreenPageLimit() 似乎不起作用

el_*_*cho 5 android android-viewpager

我在 Android 应用程序中使用 aViewPager2来让用户左右滚动(当前)2 个页面。看起来不错,除了一个小细节。

我使用它是setOffscreenPageLimit(2)因为我希望两个页面都准备好立即滚动。然而,它似乎没有做任何事情。当我第一次从第 1 页滚动到第 2 页时,第二页的布局直到完全选择(即过渡动画完成)后才会出现。ViewPager2这看起来相当不和谐,并且完全破坏了平滑滚动的意义。

第一次加载第 2 页后,来回滚动可以正常工作,两个页面都被保留,从而实现平滑过渡。

任何人都可以复制这个吗?这曾经与 一起工作得很好ViewPager。

这是我的设置方式ViewPager2:

_viewPager2FragmentHolder = getActivity().findViewById(R.id.viewPager2TargetFragmentHolder);
_viewPager2FragmentHolder.setOffscreenPageLimit(2);
_viewPager2FragmentHolder.setAdapter(new TargetFragmentStateAdapter(this));
Run Code Online (Sandbox Code Playgroud)

...这是我的适配器类:

public class TargetFragmentStateAdapter extends FragmentStateAdapter
{
    public TargetFragmentStateAdapter(@NonNull Fragment fragment)
    {
        super(fragment);
    }

    @NonNull
    @Override
    public Fragment createFragment(int position)
    {
        switch (position)
        {
            case 0:
                return new TargetCoordinatesFragment();

            case 1:
                return new TargetDirectionsFragment();

            default:
                return new Fragment();
        }
    }

    @Override
    public int getItemCount()
    {
        return 2;
    }
}
Run Code Online (Sandbox Code Playgroud)

Sim*_*uis 2

来自官方文档:https://developer.android.com/reference/androidx/viewpager2/widget/ViewPager2#setOffscreenPageLimit(int)

设置应保留在当前可见页面两侧的页面数。超出此限制的页面将在需要时从适配器重新创建。

因此,您应该将其设置为 1 以获得您想要的结果。如果屏幕外页面似乎仅在选择时才“加载”,则意味着适配器或 pageSelectionCallback 执行了错误。