【问题标题】:Don't save fragment state in ViewPager2不要在 ViewPager2 中保存片段状态
【发布时间】:2020-08-15 02:26:54
【问题描述】:

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

【问题讨论】:

    标签: java android android-viewpager2


    【解决方案1】:

    尝试将offscreenPageLimit 设置为ViewPager 为1

    viewPager2.offscreenPageLimit=1
    

    来自文档

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

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

    【讨论】:

    • 我已经尝试过了,但没有任何改变
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多