不要在ViewPager2中保存片段状态

问题描述

我正在将ViewPager2FragmentStateAdapter一起使用,如果我有三个片段,则认行为是保存片段状态,实际上我只有一个片段,但是创建了实例并将不同的类型传递给它,所以如果我具有片段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

来自文档

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

https://developer.android.com/reference/androidx/viewpager2/widget/ViewPager2#setOffscreenPageLimit(int)