我有一个带有活动和 3 个可滑动标签(片段)的应用程序。我在选项卡中创建了一些大量创建的 UI 元素,这些元素需要一些时间才能创建,并且第一次运行没问题,但是每次我刷它们时都会重新创建视图。
当我选择一个选项卡时,另一个选项卡调用 onStop(),当我再次选择前一个选项卡时,再次调用 onCreateView() 并重新填充视图,这会减慢并阻塞 UI 线程。
在选项卡中创建片段并避免在其他选项卡之间滑动时重新创建其视图的正确方法是什么?
我有一个带有活动和 3 个可滑动标签(片段)的应用程序。我在选项卡中创建了一些大量创建的 UI 元素,这些元素需要一些时间才能创建,并且第一次运行没问题,但是每次我刷它们时都会重新创建视图。
当我选择一个选项卡时,另一个选项卡调用 onStop(),当我再次选择前一个选项卡时,再次调用 onCreateView() 并重新填充视图,这会减慢并阻塞 UI 线程。
在选项卡中创建片段并避免在其他选项卡之间滑动时重新创建其视图的正确方法是什么?
为了补充 CommnosWare 所说的内容,如果您使用的是视图寻呼机,您可以简单地调用mViewPager.setOffscreenPageLimit(3);
以将所有三个保存在内存中。但是如果你的 UI 太重,你可能会注意到一些卡顿。因此,请尝试修改您的 UI 设置代码。
我在选项卡中有一些大量创建的 UI 元素,这些元素需要一些时间才能创建
如果“某个时间”超过约 5 毫秒,则您的应用程序已损坏并需要修复。使用 Traceview 准确确定您将时间花在哪里,然后修复问题,以便在主应用程序线程上花费更少的时间。
在选项卡中创建片段并避免在其他选项卡之间滑动时重新创建其视图的正确方法是什么?
AFAIK,FragmentPagerAdapter
不应该具有您所描述的效果(尽管FragmentStatePagerAdapter
会)。但是,同样,如果您解决了onCreateView()
性能问题,甚至FragmentStatePagerAdapter
不会发布问题。
只需在声明 TabAdapter 的主要 Fragment/Activity 类中添加以下代码。
viewPager.setOffscreenPageLimit(tabLayout.getTabCount());
tabLayout 和 viewPager 如下
TabLayout tabLayout = (TabLayout) root.findViewById(R.id.tab_layout);
ViewPager viewPager = (ViewPager) root.findViewById(R.id.pager);