实现ViewPager对象,以便在用户滑动之前已在内存中创建下一个屏幕。 ViewPager有一个方法setOffscreenPageLimit(n),您可以在其中设置预先创建的ViewPager片段的数量,但不允许n = 0。这背后的原因是为了保证“顺畅的用户体验”。然而,在我的情况下,页面n + 1的内容由用户在页面n上完成的内容确定。例如,如果用户点击了第n页上的复选框,则可能会发生某些小部件不应显示在第n + 1页上。我的问题是:如何确保重新创建第n + 1页?如果这是以“流畅的用户体验”为代价的,那就这样吧。我能够拦截滑动事件:
pager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener()
在该方法中,我可以调用当前片段的refresh()方法。问题是:我在refresh()方法中做了什么,或者这是错误的方法?我想重新创建的用户界面是onCreate方法,一种回调方法。或者这不可行,我是否需要用新的片段替换内存中的片段(n + 1),如果是,我该怎么做?
任何帮助都将不胜感激。
答案 0 :(得分:0)
尝试替换与ViewPager
中的网页关联的片段将是基于片段的PagerAdapter
的责任。我不知道使用FragmentPagerAdapter
或FragmentStatePagerAdapter
可以轻松实现这一目标。 My ArrayPagerAdapter
可以更好地处理它,但我不提供直接replace()
操作。
在您的情况下,更好的解决方案是调整您拥有的片段,而不是直接替换片段。从理论上讲,这几乎可以在任何程度的变化中实现。在实践中,可能存在一定程度的复杂性,之后尝试替换片段比尝试使用所有可能片段的混搭更简单。
请注意,嵌套片段可能是另一种选择,其中第N + 1页是占位符并在显示时运行FragmentTransaction
以填充自身。嵌套的片段很棘手,很古怪。
关于“漏洞”,View.INVISIBLE
表示您希望窗口小部件继续占用空间(例如,LinearLayout
之后的内容不会移动),但不绘制像素。 View.GONE
表示View
完全被忽略用于布局,尽管它仍然在层次结构中,因此如果需要可以轻松切换回View.VISIBLE
。另一种可能性是从父容器中完全删除View
,但与View.GONE
相比,这应该没有明显的变化。