问题描述
我正在将ViewPager2
与FragmentStateAdapter
一起使用,如果我有三个片段,则默认行为是保存片段状态,实际上我只有一个片段,但是创建了实例并将不同的类型传递给它,所以如果我具有片段A,A1和A2,我从a1滚动到a然后返回到适配器,它不会重新创建A,而是使用A的旧实例,这就是我正在发生的事情
但是,我不想这种行为,我希望适配器创建片段A的新实例而不是使用最后一个实例,然后如果我滚动到B,则创建B的新实例并且不使用最后一个实例。
public class JobsViewPagerAdapter extends FragmentStateAdapter {
private List<Integer> fragmentsType = new ArrayList<Integer>(){{
add(JobsType.Booked.numValue);
add(JobsType.INVITED.numValue);
add(JobsType.PAST.numValue);
}};
public JobsViewPagerAdapter(@NonNull FragmentActivity fragmentActivity) {
super(fragmentActivity);
}
@NonNull
@Override
public Fragment createFragment(int position) {
return JobsInnerFragment.newInstance(fragmentsType.get(position));
}
@Override
public int getItemCount() {
return fragmentsType.size();
}
public enum JobsType {
Booked(0),TODAY(1),INVITED(2),UPCOMING(3),PAST(4);
private int numValue;
JobsType(int value) {
this.numValue = value;
}
public int getNumValue() {
return numValue;
}
}
}
public static JobsInnerFragment newInstance(int jobsType){
JobsInnerFragment jobFragment = new JobsInnerFragment();
Bundle todayJobsBundle = new Bundle();
todayJobsBundle.putInt(Constants.JOBS_TYPE,jobsType);
jobFragment.setArguments(todayJobsBundle);
return jobFragment;
}
解决方法
尝试将offscreenPageLimit
设置为ViewPager
为1
viewPager2.offscreenPageLimit=1
来自文档
设置应保留到当前可见页面两侧的页面数。超出此限制的页面将在需要时从适配器重新创建