[开源中国]android客户端改造-2

曾经我也是个菜鸟,曾经我也是从网上搜来别人的博客的内容来解决问题,作的项目,不少都来自开源的项目,若是没有这么多热情的无私的人奉献本身的知识,软件业也不会有这么大这么快的进步,今天我虽不能贡献太多的力量,可是但愿个人绵薄之力能对须要的人有所帮助。 框架

重构osc的代码的缘由是,我原本想作一个客户端,借用一下osc的框架,结果发现很难、很复杂,因而我开始了重构,但愿这个重构的版本能给快速开发基础界面起到基础性做用,做为一个基础的工程,减小结构上的代码编写,规范结构,腾出精力进行业务逻辑的编写。 布局

下面是示例界面: .net

 

为了能读懂这片文章,先介绍几个概念 线程

UML中的【MainHeader】就是下面的界面 对象

 

UML中【FrameHead】就是下面的界面 blog

说明,这个和下面介绍的RadioFoot,都是动态添加按钮的,因此布局也是支持动态的计算从而充满屏幕的,如今就是一个例子,里面只有两个按钮,所有充满了屏幕。 继承

UML中【RadioFoot】就是下面的界面 事件

 

对应的UML类图以下 图片

 

 

在上次的基础上进一步将osc的代码进行重构,重构了以下方面: 开发


一、将adapter包中的各个类分到了各个模块的包中,尽可能使各个包独立,依赖尽可能少
二、进一步重构了frame,将上面的导航抽出来造成了类图中的FrameHead
三、每一个栏目的头部导航没有任何区别将其写在layout里不符合代码的重用的精神,彻底能够抽出,并且避免了增长一个模块就须要增长一个layout。
四、不管是news,question仍是tweet总结一下布局都是同样的,一个LinearLayout(表示头部的导航,如今抽象出来的FrameHead)和一个PullToRefreshListView(用于加载列表),彻底没有必要建立那么多的布局,因此抽象出来,一是能够减小布局,清晰结构,同时后面能够动态的添加模块,动态的为用户添加功能,作到不一样用户的不一样界面。关于frameHead(参见UML)也不用像如今这样写framebtn_News_lastest,能够维护一个map,将不一样的模块映射到map上,再进一步获取button的引用便可,如今定义例如:
  private Button framebtn_News_lastest;
  private Button framebtn_News_blog;
  private Button framebtn_News_recommend;

具体实现参见代码。

五、 关于 PullToRefreshListView中的lv_footer lv_foot_more lv_foot_progress,不一样的模块列表使用的都是同一个,彻底没有必要重复的在不一样的地方出现相同的代码,因此抽出来放到抽象类BaseFrame中,同时也减小了构造参数的个数,并且重构后,一不影响界面,而不影响功能,三开发者只要继承父类便可不用编写任何代码设置foot,也能够不知道他的存在。

六、不一样的模块能够仿照NewsMain编写,后台线程执行的获取内容经过thread开启,处理返回的数据使用handleLvData处理,因为handleLvData在BaseFrame中是抽象方法,因此实现的类中实现了,就很好的避免了原来的if else switch case的问题。

七、framehead中不一样模块的按钮在Main中经过一个Map维护,维持引用,当切换界面使frameHead中的按钮不一样的时候,就采用remove和将Map中须要的添加进来便可,避免 了对象的重复建立,也能够实现动态导航,避免了重复写layout的问题

八、上次的版本中 head中的 ProgressBar 的显示没有调,此次搞好了,数据加载显示,加载完消失

九、BaseNavBar采用泛型进行抽象,做为了framehead和RadioFoot的父类,这样代表,之后再作相似的不管是Button类的仍是RadioButton类型的导航,仍是本身定义图片类型的导航,彻底能够通用,直接继承模仿实现便可。减轻了开发导航的难度

十、NewsMain做为新闻模块的主要逻辑实现它须要修改主类Main的UI的东西和上下文,因此须要依赖他,须要在加载数据的时候显示MainHead中的进度条,因此须要依赖他,当点击FrameHead中的按钮例如【最新资讯】的时候须要更新列表中的数据,列表数据更新的行为应该属于新闻模块本身,因此放到了NewsMain中,就在NewsMain中定义了事件点击事件,可是发现点击事件必需要修改被点击按钮的状态,那么这样就会致使NewsMain中须要有FrameHead的引用了,这样就乱了,点击按钮更新本身,应该是本身的行为,至于须要修改别处的数据,那这个就又是别处本身的事了,这个就是自扫门前雪了,因此NewsMain从逻辑分析上是不须要持有FrameMain中的引用的,因此最后改为了FrameHead按钮本身更新本身状态,点击【最新资讯】新闻本身处理本身的数据,这样就比较好了,减小了依赖。具体实现参考代码。

备注:

    红薯,大哥我历来没有用过代码分享,他老是提示我比较晚了洗洗睡吧,我确实困了,提交代码还要片断啊,打包的上传不了啊,晕了,没找到,仍是放到别处你们下载吧,你们请见谅,不是有意的。

下载地址:

http://download.csdn.net/detail/zyq_1/5638071

相关文章
相关标签/搜索