我有一个带有FragmentStateAdapter和离屏页面限制为1的ViewPager2:
viewPager.setAdapter(new MyFragmentStateAdapter(this));
viewPager.setOffscreenPageLimit(1);
public class MyFragmentStateAdapter extends FragmentStateAdapter {
MyFragmentStateAdapter(@NonNull Fragment fragment) {
super(fragment);
}
@NonNull
@Override
public Fragment createFragment(int position) {
return new ItemFragment(position);
}
@Override
public int getItemCount() {
return 15;
}
}
发生了什么:
- 我观察到每次在视图页面上滑动时,都会有一个卡顿的滑动动画。所以我开始调查它。
我的发现:
- 我发现在ViewPager2中,新的屏幕外片段是在滑动手势的开始时创建的(而现在已被弃用的ViewPager是在滑动手势结束时创建的)。
- 无论setOffscreenPageLimit的值是多少(除非您的意图是一次加载所有片段),每当视图页面需要创建新的屏幕外片段时都会出现这个问题。
为什么这是个问题:
- 这意味着片段的创建总是会干扰滑动动画,基本上破坏了setOffscreenPageLimit的目的(但是,如果您的片段非常轻量级,您可能不会注意到问题)。
问题:
- 是否有一种方法可以强制ViewPager2与FragmentStateAdapter在滑动手势结束时创建屏幕外片段(就像已弃用的ViewPager一样)?