在ViewPager中,Fragment(n + 1)取决于Fragment(n)中的用户输入。如何创建片段(n + 1)?

时间:2014-02-05 22:13:23

标签: android android-fragments android-viewpager

实现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),如果是,我该怎么做?

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

尝试替换与ViewPager中的网页关联的片段将是基于片段的PagerAdapter的责任。我不知道使用FragmentPagerAdapterFragmentStatePagerAdapter可以轻松实现这一目标。 My ArrayPagerAdapter可以更好地处理它,但我不提供直接replace()操作。

在您的情况下,更好的解决方案是调整您拥有的片段,而不是直接替换片段。从理论上讲,这几乎可以在任何程度的变化中实现。在实践中,可能存在一定程度的复杂性,之后尝试替换片段比尝试使用所有可能片段的混搭更简单。

请注意,嵌套片段可能是另一种选择,其中第N + 1页是占位符并在显示时运行FragmentTransaction以填充自身。嵌套的片段很棘手,很古怪。

关于“漏洞”,View.INVISIBLE表示您希望窗口小部件继续占用空间(例如,LinearLayout之后的内容不会移动),但不绘制像素。 View.GONE表示View完全被忽略用于布局,尽管它仍然在层次结构中,因此如果需要可以轻松切换回View.VISIBLE。另一种可能性是从父容器中完全删除View,但与View.GONE相比,这应该没有明显的变化。