一款MVVM设计模式的Gank客户端

DusNugent 8年前
   <h3><strong>为什么写这个客户端?</strong></h3>    <p>我学习android也有一年多了,都说项目才是检验自己学习成果的最好方式,正好最近学习Material Design, RxJava & Retrofit框架和MVVM设计架构也有一段时间了,正好,网络上有gank.io这个免费接口,虽然已经有不少人写过这个客户端,但是没有一个是用MVVM设计架构的,于是我便写了这个项目。这个项目是我的第一个上线项目,可以 <strong>查看图片,视频,技术文章等,支持收藏,搜索等</strong> ,界面是仿网易云音乐,用户可以选择观看模式和摇一摇模式,界面简洁大方,操作简单易懂。到现在,这是第一个也是唯一一个使用MVVM设计架构的Gank.io客户端,想想还是挺有成就感的。</p>    <h3><strong>这个项目用了什么?</strong></h3>    <p>项目使用了Material Design, RxJava & Retrofit框架和MVVM设计模式,图标是使用svg和icon.用的都是最新的东西。图片的加载是用picasso,显示是使用RecyclerView,控件用的几乎都是Material Design,并且遵从Material Design规格要求,使得整个界面看起来很有Material Design风格,页面架构采用的是少activity多fragment,减少资源的消耗和更快的响应页面间切换和交互,使得用户体验更好。</p>    <h3><strong>为什么用这些?</strong></h3>    <p>关于这个问题,我先回答我特别喜欢RxJava和MVVM,先说RxJava,这个其实主要是为了解决异步问题,特别是对handler厌烦的人而言,RxJava的出现实在是太及时了,RxJava不算一种框架,它不能拿来就使用,但是它特别好,因为它所实现的大概就是,你输入一个东西,然后输出你想要的东西,这么说可能很宽泛,举个例子,比如在这个项目中,你的输入是通过Retrofit得到的数据,而这个数据是一个类,但是你只想要其中的url,怎么办?RxJava就可以,你只需要使用map操作符就可以(当然在这个项目中我没有这么写,因为我不只是想得到url),而使用Retrofit就是因为它对RxJava进行了很好的支持,当然,它本身也很方便。然后就是MVVM了,这个框架也出现一阵子了,对于使用这个框架,就不得不介绍 Data Binding Library 这个库了,这个库和mvvm一起使用,简直爽的不行, Data Binding Library 这个库能让你在xml中进行数据绑定,在没有使用这个库之前,每次我们写xml都只是为了加载一个布局,除了这个功能,xml几乎没有别的作用,这样就让代码变得复杂、繁琐。那么如何使用这个库呢?我的建议是去 <a href="/misc/goto?guid=4959716722715353785" rel="nofollow,noindex">官网</a> ,当然至于如何KX上网,我就不说了,毕竟僧多肉少(#阴险),如果不会KX上网或者不想看英文的同学,这里我推荐去看简书。 而对于为什么 Material Design ,只能说,谁用谁知道,毕竟是官方的东西。</p>    <h3><strong>你能从这个项目中学到什么?</strong></h3>    <p>1. <strong>RxJava和Retrofit结合进行网络请求</strong> ,以及如何将请求 <strong>和ProgressDialog结合,</strong> 也就是展示网络请求的过程。</p>    <p>2.如何更好的在项目中使用 <strong>Data Binding Library这个库来实现MVVM</strong> 设计架构。</p>    <p>3.如何实现 <strong>少Activity多Fragment页面架构</strong> ,以及如何在一个Fragment中更好的嵌套另一个Fragment。</p>    <p>4.在 Viewpager 下更好的使用 Fragment ,以及多重ViewPager嵌套下,各个Fragment的处理方式,几乎 <strong>涵盖了Fragment的各种使用方式以及和activity交互方式</strong> ,比如,优雅的控制让Fragment自己决定处理返回事件还是让 activit y来处理。</p>    <p>5. <strong>一些简单的自定义View</strong> ,比如自定义Edittext实现带有清除效果的搜索框。</p>    <p>6. <strong>Material Design库中绝大部分控件的使用</strong> ,遵从Material Design规格要求,使得整个界面看起来很有Material Design风格。</p>    <p>7.如何让 <strong>RecyclerView和Data Binding Library</strong> 更好的结合。</p>    <p>8.如何更好的封装程序以及继承,让业务层和逻辑层更好的分离。</p>    <p>9.这个项目用的都是最新最火的框架和设计模式,所以你以后肯定会用到,而且在很长的时间里都不会有"过期"这一说(当然,知识是没有过期这一说法的,原谅我语文不好)。</p>    <p>10.我现在大四,也就意味着我有很多自由的时间,如果你在看我项目的时候遇到任何问题都可以和我联系,我会尽快给你回复,而且由于我技术比较菜(#谦虚),所以没有专家盲点(指对一个事务知道的越多,就越发不记得"不知道这个事"的情形),也就能更好的回答你们的问题(第一次将自己技术菜说的这么清新脱俗#害羞)。</p>    <h3> </h3>    <p> </p>    <p> </p>    <p>来自:http://www.jianshu.com/p/7574ae0d7b36</p>    <p> </p>