☰
从Demo到生产环境:Android-WizardPager向导模式应用于真实业务场景的6个实战技巧
2026/10/15 10:52:11 网站建设 项目流程
  • 示例工程
  • 移动开发

【免费下载链接】Android-WizardPager

Android pager-style wizard flow sample code

项目地址:https://gitcode.com/gh_mirrors/an/Android-WizardPager
点击查看免费下载

Android-WizardPager 是基于 ViewPager 的 Android 向导(Wizard)流程示例项目,以三明治/沙拉点单为 Demo,把"多步骤表单"拆解为逐页滑动的分步体验。本文将它当作工程蓝本,总结 6 个可直接迁移到注册、下单、申请等真实业务的实战技巧,帮你把 Demo 升级为生产可用的向导流程。

💡 获取代码:git clone https://gitcode.com/gh_mirrors/an/Android-WizardPager

30秒看懂架构:模型—适配—操控的三层分工

整个向导由三层协作完成,职责非常清晰:

层级核心文件职责
模型层SandwichWizardModel.java声明式定义向导步骤、选项与数据
适配层MainActivity.MyPagerAdapter把当前页面序列转成 Fragment 页面
操控层MainActivity.java + activity_main.xmlViewPager、顶部步骤条、上一步/下一步按钮

模型层通过 ModelCallbacks 接口向上层广播onPageDataChanged(数据变化)和onPageTreeChanged(页面树变化)两种事件,UI 只需监听事件刷新——这就是后面所有技巧的地基。

技巧1|用 AbstractWizardModel 声明式定义向导步骤,告别硬编码页面

Demo 中全部业务步骤集中在 SandwichWizardModel.java 的onNewRootPageList()一个方法里:

return new PageList( new BranchPage(this, "Order type") .addBranch("Sandwich", ...页面集合...) .addBranch("Salad", ...页面集合...), new CustomerInfoPage(this, "Your info").setRequired(true) );

生产建议:每个业务(注册、开通、下单)写一个自己的 Model 子类,页面用 Page 的子类表达,例如:

  • 单选页:SingleFixedChoicePage.java
  • 多选页:MultipleFixedChoicePage.java
  • 文本输入页:CustomerInfoPage.java

好处是步骤增删只改数据不改 UI,ViewPager 的页数、顶部步骤条、确认页内容全部自动联动(见 getCurrentPageSequence 将页面树"拍平"为当前序列)。

技巧2|用 BranchPage 构建动态流程:步骤随用户选择而变化

真实业务最常见的形态是"分支流程"——选了 A 才需要填 A 的表单。Demo 的 BranchPage 原生支持:点单页里"Toasted?"选 Yes,才会多出"Toast time"一步;选 No 则该步自动消失。

new BranchPage(this, "Toasted?") .addBranch("Yes", new SingleFixedChoicePage(this, "Toast time")...) .addBranch("No") .setValue("No");

生产建议:把"套餐类型""证件类型""支付方式"这类决定后续步骤的字段都建成 BranchPage,用户切换选项时页面树自动重算,无需手写任何 if-else 导航逻辑。

技巧3|必填校验与截断机制:阻止用户跳过关键步骤

向导流程最典型的事故是"没填收货地址就点了提交"。Demo 用两道防线解决:

  1. 页面级必填标记:Page.setRequired(true);
  2. 截断页面(CutOff Page):MainActivity.recalculateCutOffPage 会找到"第一个未完成且必填的页",并让 Adapter 的页数截断在这里——用户物理上滑不到后面的页面,"下一步"按钮同时置灰。

生产建议:把校验规则(如邮箱格式)放进各 Page 子类的isCompleted()中(参考 CustomerInfoPage.isCompleted),校验逻辑与 UI 彻底解耦,方便单元测试。

技巧4|状态持久化:进程被杀后向导进度秒恢复

Android 随时可能回收进程,向导走到第 5 步数据全丢会是灾难。Demo 的做法极简:

  • 保存:onSaveInstanceState 中调用mWizardModel.save(),把所有页面数据打包成 Bundle;
  • 恢复:onCreate里检测 savedInstanceState 并调用mWizardModel.load(bundle)。

生产建议:这是内存级保活。若产品要求"下次打开 App 继续填",把save()返回的 Bundle 序列化到本地存储(如 SharedPreferences/数据库),启动时再load()即可,模型层 API 完全复用。

技巧5|确认页 Review:让用户一键回改任意步骤

提交前汇总确认是降低投诉率的关键一步。Demo 的 ReviewFragment 会自动遍历当前页面序列,调用每页的getReviewItems()收集摘要(ReviewItem 还带 weight 控制排序),空值自动显示 "(None)"。

更妙的是点击任意一行即可跳回对应页修改:onListItemClick 携带 pageKey 回调 onEditScreenAfterReview,定位后底部按钮还会变身为"Review",改完一键返回确认页。

生产建议:为敏感字段(金额、手机号)自定义getReviewItems()的展示格式(如脱敏),确认页的交互框架直接照搬。

技巧6|提交确认对话框:接入真实业务前的最后一道闸

Demo 的"下一步"按钮在最后一页自动变为 "Submit order" 绿色按钮(updateBottomBar),点击后先弹出确认对话框(文案见 strings.xml),用户二次确认才真正提交。

生产建议:在这个确认回调里接入你的真实提交逻辑:

  • 收集mWizardModel.getCurrentPageSequence()中各 Page 的getData(),组装成订单/申请表单;
  • 提交请求建议放在后台线程或协程中执行,避免卡 UI;
  • 成功后跳转结果页并销毁向导状态,失败则保留数据原地重试——向导模型的数据结构天然支持"失败不丢数据"。

总结:生产级向导流程检查清单

能力对应机制关键文件
声明式步骤定义onNewRootPageList()SandwichWizardModel.java
动态分支流程BranchPage.addBranch()BranchPage.java
必填校验 + 跳步拦截setRequired+ CutOff PageMainActivity.java
进程恢复 / 跨会话持久化save()/load()AbstractWizardModel.java
汇总确认 + 一键回改ReviewFragment + pageKey 定位ReviewFragment.java
提交确认 + 真实业务接入确认对话框 + 数据组装MainActivity.java

掌握以上 6 点,你就拥有了一个步骤可配置、数据可校验、状态可恢复、提交有确认的完整向导方案——这正是 Android-WizardPager 从 Demo 走向生产环境的全部精髓。

  • 示例工程
  • 移动开发

【免费下载链接】Android-WizardPager

Android pager-style wizard flow sample code

项目地址:https://gitcode.com/gh_mirrors/an/Android-WizardPager
点击查看免费下载

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询