防止ViewPager预加载下一个片段(标签页)

7
我正在使用Fragment在Android上开发一个应用程序。我有这三个选项卡: User app screenshot 我知道无法阻止每个侧面(前一个和下一个)加载一个片段,只要setOffScreenPageLimit()的最小值为1,但这是否意味着如果我想在Descargas Fragment中运行的AsyncTask的onPreExecute方法中显示ProgressDialog,那么当我导航到Capturador时,这将必然加载ProgressDialog吗?如果是,我不知道如何让用户知道我正在下载软件包(这就是Descargas所做的事情,解析一些XML)。
提前感谢;)

1
这个问题表述得很好。我面临着类似的挑战,需要在不同的 Fragments 中显示 Dialogs,但无法实现因为它们会重叠在一起。 - tolgap
让我们希望有人能帮助我们。我必须承认,我对Fragments有点或更多的困惑,但我不知道如何解决这个问题。 - Keyser Sozé
setOffScreenPageLimit() 总是默认为 1,这真的很愚蠢。 - tolgap
不是与问题相关,但Android设计指南建议始终将设置按钮放在溢出菜单中。 - Steven Schoen
1个回答

4
在“Descargas”片段中嵌入一个进度条,或在片段加载时在中心叠加一个不确定进度条。
对话框实际上是活动的一部分,因此它只适用于其中一页是没有意义的。
尽管如此,如果您坚持使用对话框,您可以实现“onPageChangeListener”。
viewPager.setOnPageChangeListener(OnPageChangeListener);
并且当选定片段被选择时,您可以弹出相应的对话框,并在导航离开时相反。

谢谢你的回答。那么我会尽力做一些符合编程良好习惯的一致性事情,考虑到我只是在学习。我猜好的方法应该是在主 Activity 中控制图形事件,如对话框或 Toast,而不是在片段中控制。如果有人能给我一些想法,我会非常感激。我不希望你们中的任何人为我工作,只需要提示或说明即可。 - Keyser Sozé
回答自己,并感谢Pork的帮助,我终于实现了一个在布局中定义的不确定进度条。如果“Descargas”片段成功获取到我想要的包时,我会通过调用ProgressBar.setVisibility(View.GONE)方法隐藏它,等等。希望这不是一个糟糕的解决方案,因为根据我的知识水平(并不是很高级),我甚至无法开始实施OnPageChangeListener选项。 - Keyser Sozé
那听起来很完美,Keyser!你肯定可以从片段中使用对话框,但是在ViewPager中使用片段有点棘手。你必须注意到对话框确实旨在防止用户执行任何其他操作。但是,如果他们在等待时可以在活动中做其他事情,那么最好不要使用对话框。对我来说,这意味着ProgressDialog通常不应该成为大多数人最终解决方案中的快速解决方法。你可以从片段中驱动对话框,没问题,只要知道用户只真正了解/关心活动即可。 - Pork 'n' Bunny
你说得完全正确。当Descargas在工作时,我用ProgressDialog阻塞UI是没有意义的,因为用户实际上可以在应用程序中执行其他操作。非常感谢你,因为你不仅仅给了我一段代码,而且让我看到了我以前流程的不合理之处。 - Keyser Sozé

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接