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

Android 在ViewPager中,片段(n+;1)取决于用户在片段(n)中的输入。如何创建片段(n+;1)?,android,android-fragments,android-viewpager,Android,Android Fragments,Android Viewpager,ViewPager对象的实现使得在用户滑动到下一个屏幕之前,下一个屏幕已经在内存中创建。ViewPager有一个方法setOffscreenPageLimit(n),在该方法中,您可以设置提前创建的ViewPager片段的数量,但不允许n=0。这背后的原因是为了保证“流畅的用户体验”。然而,在我的例子中,第n+1页的内容由用户在第n页上所做的决定。例如,如果用户单击了第n页上的复选框,则可能会出现某些小部件不应显示在第n+1页上的情况。我的问题是:如何确保重新创建第n+1页?如果这是以“流畅的用

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


如果有任何帮助,我们将不胜感激。

尝试替换与
ViewPager
页面相关联的片段将由基于片段的
PagerAdapter
负责。我不知道使用
FragmentPagerAdapter
FragmentStatePagerAdapter
可以实现这一点的简单方法。虽然我没有提供直接的
replace()
操作,但是我可以更好地处理它

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

请注意,嵌套片段可能是另一个选项,其中N+1页是占位符,并在显示时运行
FragmentTransaction
来填充自身。嵌套的片段既复杂又古怪


关于“孔”,视图不可见表示您希望小部件继续占用空间(例如,
LinearLayout
中的填充物不会移动),但不会绘制像素<代码>视图。消失意味着,出于布局目的,
视图
被完全忽略,尽管它仍然在层次结构中,因此可以轻松切换回
视图。如果需要,可见
。另一种可能是完全从父容器中删除
视图
,但与
视图相比,这应该没有明显的变化。GONE

“例如,如果用户单击了第n页上的复选框,则可能会发生某些小部件不应显示在第n+1页上的情况。”--试图在
ViewPager
中强制重新创建页面以隐藏小部件类似于试图通过烧毁房屋来避免吸尘。如果要根据复选框隐藏小部件,请隐藏小部件。要么将复选框事件推送到受影响的片段,要么在片段可见时拉复选框状态。啊,这是个好主意!在这种情况下,在内存中创建的页面n+1有一组小部件(或者是一组复选框),其中几个需要隐藏,但不是新创建的。确实没有必要重新创建页面。谢谢我实施了它,它确实有效。现在的问题是单选按钮列上有洞。我希望我能找到一种方法来“收缩”专栏,以消除隐藏小部件造成的漏洞。再次感谢。请确保使用
View.GONE
,而不是
View.INVISIBLE
。现在这是一个早上起床的好方法,可以减少头痛。非常好用,再次感谢!(如果你把它表述成一个正式的答案,我可以给你荣誉,如果你关心这些事情的话)。