【问题标题】:How to load view faster using or without using setOffscreenPageLimit and retain pages?如何使用或不使用 setOffscreenPageLimit 更快地加载视图并保留页面?
【发布时间】:2025-12-09 19:55:01
【问题描述】:

我们知道 Android viewPager 有一个 setOffscreenPageLimit 方法来确定应该预先创建和保留的不可见页面的数量。

我有一个测验应用程序,它通过 API 调用加载 10 个问题。

if(response.code() == HttpURLConnection.HTTP_OK){
    data = response.body();
    fragments = new ArrayList<>();
    for (int t = 0; t < response.body().getData().getMcqs().size(); t++) {
        ExerciseQuizFragment practiceQuizFragment = QuizFragment.newInstance(t, null);
        fragments.add(practiceQuizFragment);
    }
    loadViewPagerAndViews();
}

在玩测验时,用户可以跳过问题或提交答案并在同一屏幕上获得结果。每个测验还有一个“上一个”按钮,用户可以查看他之前对该问题的统计信息(用户回答是否正确/错误/跳过),因为我像这样使用 setOffscreenPageLimit,所以该按钮被保留。

private void loadViewPagerAndViews() {
    binding.pager.setAdapter(new PagerAdapter(getSupportFragmentManager(), getLifecycle()));
    binding.pager.setUserInputEnabled(false);
    binding.pager.setOffscreenPageLimit(data.getData().getMcqs().size());
}

测验视图如下所示:

问题是因为我 setOffscreenPageLimit 等于测验长度。第一次加载测验视图时加载速度太慢。如果我使用默认的 setOffscreenPageLimit,它的加载速度会更快,但在这种情况下,用户设备会离开屏幕,所有以前的用户都保留了丢失的统计信息,这可以通过测验视图的上一个按钮获得。

如果我使用默认的 setOffscreenPageLimit 而不是测验大小,我如何保留保留的用户统计页面?还有什么方法可以让我使用测验大小 setOffscreenPageLimit 更快地加载?

【问题讨论】:

    标签: java android android-viewpager


    【解决方案1】:

    您可以尝试使用 FragmentStatePagerAdapter https://developer.android.com/reference/androidx/fragment/app/FragmentStatePagerAdapter 而不是像这样使用 PagerAdapter:-

    PagerAdapter 的实现,它使用 Fragment 来管理每个页面。该类还处理片段状态的保存和恢复。

    那么默认的屏幕外限制 +/- 1 可能对您来说没问题,就好像 viewpager 确实决定取消缓存片段,片段的状态应该在必要时保存和恢复。

    【讨论】:

      最近更新 更多