繁体   English   中英

不要在 ViewPager2 中保存片段 state

[英]Don't save fragment state in ViewPager2

我将ViewPager2FragmentStateAdapter一起使用,如果我有三个片段,则默认行为是保存片段 state,实际上我有一个片段,但创建实例并将不同的类型传递给它,所以如果我有片段 A、A1 和 A2 并且我从a1 到 a 然后返回到 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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM