在Android中制作类似向导的应用程序

30

你认为在Android平台上实现向导式应用程序(用户可以通过“下一步”和“返回”按钮在屏幕之间导航,每个屏幕都必须保存一些状态数据)的最佳方式是什么?

我主要可以想到两种方法:

  1. 为每个屏幕设计一个活动+视图,然后通过调用每个活动来使屏幕切换。这样做的好处是我可以将系统返回按钮用作我的返回处理程序,并且我不必自己处理,每个活动也将保存自己的状态。

  2. 有一个活动和许多视图,在每个屏幕更改时切换视图,这有助于我重复使用更多代码,但会使保存状态变得混乱。

你认为哪种方法在Android上实现这个功能最好?

5个回答

17

该库已不再进行开发。

使用Android导航组件结合ViewModels创建向导流程。


我开发了一个轻量级的Android库,它是基于Android的ViewPager构建的,可用于创建类似向导的活动。请查看:WizarDroid


这是一个不错的解决方案,但并不是完全通用的。对ViewPager的依赖使得至少需要在两侧创建一个片段,如果下一步的内容还没有确定,这可能不太方便。 - Sergo Pasoevi
无法弄清如何使用依赖于支持库19.x的Wizardroid,而新版本的支持库则不兼容。 - m02ph3u5
WizarDroid库不再维护。请参见https://github.com/nimrodda/wizardroid#deprecated - Nimrod Dayan
@DarkCygnus,在我发表评论之后,该帖子已被编辑以说明这一点。回答是可以编辑的,所以请记住这一点。我将删除原始评论和此评论,您也可以这样做,因为它们现在都不相关了。 - David d C e Freitas

12

我建议选择2,因为它符合活动和视图的目标。在这种情况下保存状态很容易 - 如果您使用MVC模式,可以简单地拥有一个传递给视图的模型对象。每个视图将拥有可以读取/写入的模型部分。无论您身处何处,模型始终应具有当前状态。如果您被处理掉,只需保存模型即可。还原功能是自动执行的,因为显示每个页面时已经从模型中读取。


2
有一个库可以让你轻松创建向导功能,请查看WizarDroid。它有很好的文档,并且在不断地开发中。 - Nimrod Dayan
@CodePond.org 这正是我所需要的。它运行得很好,而且花费我很少的时间来模仿这个例子。 - theblang

6

我选择了第一种方法,因为它似乎更自然。另一个应用程序使用 ViewFlipper 来切换视图,但那与向导完全不同。


不使用 ViewFlipper 怎么做? - Orr Matarasso

2

9年前,这显然是一种非常不同的情况 - 但我认为现在最好的方法是使用Fragments。

为向导中的每个“页面”设置一个Fragment,让它处理自己的生命周期和状态。

使用Fragment.getFragmentManager()从每个Fragment内部更改页面 - 这将返回父Activity的FragmentManager,允许Fragment替换自身。


1

我认为第二种方法更好。将每个“页面”放在一个视图中,然后只需在它们之间轮流显示和隐藏即可。这使得实现漂亮的过渡效果变得非常简单。您考虑维护哪种状态?唯一无法自动处理的状态是焦点,我认为您可能希望在切换页面时重置它。如果您认为回退是您的应用程序的正确行为,那么也很容易实现。

使用第一种方法,您可以重复使用几乎所有代码(只需定义自己的WizardBase类),但我认为启动活动比在视图之间切换要慢得多(并且需要更多内存)。


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