实现统一用户体验的BaseActivity

对一个规模较大的App开发团队来说,保持统一的代码规范是个好的事情,同时,保持统一的用户体验规范也是个好的事情。
当用户进入一个页面时,一般会有以下交互场景:
场景1, 初始化loading,页面从server拉取配置信息;
场景2, 初始化成功,页面展现业务UI布局,比如输入框,按钮等;
场景3, 初始化失败,页面从server拉取配置信息出现异常;
场景4, 初始化失败,因为设备的网络连接异常;
5, ……
对于某一个负责某一业务模块的开发人员来说,他可能会有糟糕的用户体验实现:
实现场景1, 当初始化页面的时候,直接展示业务UI布局,然后弹出一个loading对话框,用户可以看到地下残缺不全的UI元素;
实现场景2, 初始化成功之后,dismiss掉第1条的loading对话框,业务UI布局被数据填充;
实现场景3, 因为数据错误初始化失败, dismiss掉第1条的loading对话框,业务UI布局没有数据可填充,残缺不全,甚至状态不对(比如某个按钮需要让server的开关决定是不是点亮状态),然后toast一句错误给用户,之后用户只好退出页面再从入口再次点进来以进行初始化重试;
实现场景4, 因为网络异常初始化失败,同第3条,UI元素没数据填充,状态不对,用户被一句toast打发了,没有重试入口,只能退出页面再来;
对于另一个负责某一业务模块的开发人员来说,他可能会有良好的用户体验实现:
实现场景1, 当初始化页面的时候,页面暂时不展示业务UI布局,而是展示一个加载中的页面;
实现场景2, 当初始化成功之后,切换到业务UI布局,并用数据填充UI;
实现场景3, 因为数据错误初始化失败之后,从加载的状态切换到一个“没有数据”或者“数据错误“之类的页面,并且用户点击页面,可再次重试初始化接口;
实现场景4, 因为网络异常初始化失败之后,从加载的状态切换到一个”网络未连接“之类的页面,并且用户点击页面,会再次重试初始化接口;甚至,监听网络状态,当网络连接后,自动重试;
好,对比之后,我们把第二个开发人员的体验实现当做规范,并要求所有开发人员在业务页面实现过程中都遵守这个规范。
那么问题来了:
1, 业务开发人员工作量增加,上面讲的4个场景都要一一实现;
2, 冗余代码多,上面说的场景,除了第2条,1, 3,4都是一样的代码实现;
3, 场景1, 3, 4的实现没有收敛,以后无法统一修改;
然后,一个抽象的实现来了,BaseActivity, 把场景1, 3, 4都包了,只留下2给业务开发人员去实现。
更多,一般每个页面都有导航栏,导航栏是个通用实现,上面的场景都是针对导航栏下面的区域进行的,跟导航栏没关系,所以这个BaseActivity也把导航栏的实现给承包了,子类透明无感。
子类布局的root view对于BaseActivity来说,只是其布局中的一部分。
BaseActivity要做这些事情:
1, 布局,包含导航栏,以及导航栏下面的4个要切换的布局,包括loading布局、业务UI的父布局、数据错误布局、网络异常布局;
2, 重写所有setContentView方法,子类调用这个方法的时候,把其传过来的view添加到第一条里的业务UI的父布局上;
3, 假定网络请求返回的数据对象是BaseResult,BaseActivity提供protected的一个方法,该方法接收一个BaseResult参数,然后根据其内容自动切换到对应的场景布局下;
4, 提供网络异常和数据错误的点击事件回调给子类,以便子类发起重试;
实现统一用户体验的BaseActivity的更多相关文章
- Apple、Google、Microsoft的用户体验设计原则
轻巧的Apple 注重设计过程: 在设计过程中引入用户交互的5个目标: 了解您的目标客户 分析用户的工作流 构造原型系统 观察用户测试 制定观察用户准则 做出设计决定 避免功能泛滥 80% 方案 优秀 ...
- jQuery实现图片预加载提高页面加载速度和用户体验
我们在做网站的时候经常会遇到这样的问题:一个页面有大量的图片导致页面加载速度缓慢,经常会出现一个白页用户体验很不好.那么如何解决这个问题呢?首先我们会想到的是提高服务器性能,使用静态缓存等手段来加快图 ...
- (转)iOS Wow体验 - 第三章 - 用户体验的差异化策略
本文是<iOS Wow Factor:Apps and UX Design Techniques for iPhone and iPad>第三章译文精选,其余章节将陆续放出.上一篇:Wow ...
- (转)iOS Wow体验 - 第二章 - iOS用户体验解析(1)
本文是<iOS Wow Factor:Apps and UX Design Techniques for iPhone and iPad>第二章译文精选的第一部分,其余章节将陆续放出.上一 ...
- 用户体验 | 寻找成套的 App SDK 服务
前言 对于开发者来说,三方 SDK 这个词已经是一个不需要任何解释的词语了,然而我想面对琳琅满目的 SDK 产品,大家都会纠结如何选择.那么选择一个 SDK 需要注意哪些问题呢? SDK 的 稳定易用 ...
- 第十届Mockplus ▪ UXPA用户体验西南赛区决赛成功举行
九月的重庆,秋意渐浓. 伴随着凉爽的秋风,第十届Mockplus·UXPA国际用户体验创新大赛(UXD Award2018)西南赛区决赛于9月16日下午在四川美术学院-虎溪校区成功举办.来自西南区域各 ...
- web测试总结—用户体验
一.什么是用户体验 用户体验,英文叫做user experience,缩写为UE,或者UX.一个较常见的定义是“指用户访问一个网站或者使用一个产品时的全部体验.他们的印象和感觉,是否成功,是否享受,是 ...
- cnblogs用户体验评价
1. 是否提供良好的体验给用户(同时提供价值)? 博客园就相当于现在生活中处处可见的微博,所有人都在上面发表自己的一些看法,当然我们比较关注的是计算机编程方面的一些博客,大多数编程人员愿意分享自己的代 ...
- “今日校园” App 用户体验分析
一.背景 为进一步提升信息化应用水平,更好的服务师生,南通大学智慧校园移动端APP“今日校园”定于11月5日正式上线运行.登陆APP可浏览学校新闻.校园生活.各部门微信公众号等内容,查看校内通知.校内 ...
随机推荐
- 文件夹右键添加“DOS”命令
导入注册表 Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\Folder\shell\RunCMD] @="进入命令行&quo ...
- JS中判断null、undefined与NaN的方法
写了个 str ="s"++; 然后出现Nan,找了一会. 收集资料如下判断: 1.判断undefined: 代码如下: <span style="font-siz ...
- 微信内嵌html5页面清楚缓存
给每个js添加一个版本号,每次修改js后改变一下版本号,浏览器即可自动刷新不用手动清理缓存 <script src="<%=path%>/js/boss/kpi/redli ...
- PowerDesigner逆向工程导入MYSQL数据库总结
由于日常数据建模经常使用PowerDesigner,使用逆向工程能更加快速的生成模型提高效率,所以总结使用如下: 首先现在PowerDesigner,这里提供PD16.5版本链接: http://pa ...
- 软件工程(FZU2015)赛季得分榜,第9回合
目录 第一回合 第二回合 第三回合 第四回合 第五回合 第6回合 第7回合 第8回合 第9回合 第10回合 第11回合 积分规则 积分制: 作业为10分制,练习为3分制:alpha30分: 团队项目分 ...
- 创建一个新的Activity
1.创建一个类继承Activity类,并创建对应的布局文件,在onCreate方法中加载该布局. 2.在AndroidManifest.xml声明该组件 注:如果想配置一个activity在桌面上有该 ...
- [转]ExtJs:xtype的含义
原文地址:http://www.cnblogs.com/timy/archive/2010/08/13/1799111.html 根据我在EXT论坛上的观察,xtype用起来的时候疑惑会比较多.甚至有 ...
- 基于Emgu CV的人脸检测代码
这个提供的代码例子是Emgu CV提供的源码里面自带的例子,很好用,基本不需要改,代码做的是人脸检测不是人脸识别,这个要分清楚.再就是新版本的Emgu CV可能会遇到系统32位和64位处理方式有区别的 ...
- JUnit备忘录
测试方法不应该有参数 使用junit做测试的时候发现总是报错:Method XXX should have no parameters; 后来发现是因为测试方法里面函数参数
- 【BZOJ-2476】战场的数目 矩阵乘法 + 递推
2476: 战场的数目 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 58 Solved: 38[Submit][Status][Discuss] D ...