我弄清楚是什么原因造成的ViewPager2
加载页面的初始延迟。
碰巧我正在使用TabLayout
from com.google.android.material.tabs.TabLayout
随着ViewPager2
为每个页面提供可滚动的选项卡标题。但是,如果您有很多页面(就像我的情况一样),则 UI 需要时间来设置每个选项卡并将其放置在 UI 中。
解决方案是删除TabLayout
from ViewPager2
,如果您需要显示标题,请使用ToolBar
通过更改和设置作为每个页面的标题页指示器ToolBar
根据您的需要编写文本。
往好的方面看,你最终会得到更干净的用户界面,因为屏幕上有更多的空间供你使用ViewPager2
向用户显示其内容。
我注意到的另一件事是如果你想充分利用ViewPager2
性能优势,然后使用默认 viewpager 的 offscreenPageLimit,如下所示:
公共无效setOffscreenPageLimit(int限制)
设置应保留在当前可见页面两侧的页面数。超出此限制的页面将在需要时从适配器重新创建。将其设置为 OFFSCREEN_PAGE_LIMIT_DEFAULT 以使用 RecyclerView 的缓存策略。给定值必须大于 0 或 #OFFSCREEN_PAGE_LIMIT_DEFAULT。
远离当前页面的限制页面内的页面将被创建并添加到视图层次结构中,即使它们在屏幕上不可见。超出此限制的页面将从视图层次结构中删除,但 ViewHolders 将像往常一样被 RecyclerView 回收。
这是作为一种优化提供的。如果您提前知道需要支持的页面数量或在页面上设置了延迟加载机制,则调整此设置可以提高分页动画和交互的流畅度。如果您有少量页面(3-4)可以同时保持活动状态,那么当用户来回翻页时,在新创建的视图子树的布局上花费的时间就会更少。
您应该将此限制保持在较低水平,特别是如果您的页面具有复杂的布局。默认情况下,它设置为 OFFSCREEN_PAGE_LIMIT_DEFAULT。
https://developer.android.com/reference/androidx/viewpager2/widget/ViewPager2.html#setOffscreenPageLimit(int) https://developer.android.com/reference/androidx/viewpager2/widget/ViewPager2.html#setOffscreenPageLimit(int)
话虽这么说,我强烈建议您更换ViewPager
to ViewPager2
对于所有情况,因为ViewPager
不再接受 Google 支持,并且ViewPager2
除了我在这里所说的之外,还有很多东西可以提供:
RTL(从右到左)布局支持
垂直方向支持
可靠的片段支持(包括处理对底层片段集合的更改)
数据集更改动画(包括 DiffUtil 支持)
https://developer.android.com/jetpack/androidx/releases/viewpager2 https://developer.android.com/jetpack/androidx/releases/viewpager2