- 使用MVP框架搭建,分包明确,V层和M层解耦,通过接口完成V层和P层以及P层和M层通信,解决内存泄漏问题
- Retrofit做网络请求,封装网络请求工具类,使用单例模式,添加日志拦截器打印网络请求内容
- 集成Rxjava库,集成Gson库
- 请求轮播图接口,实现轮播图效果
- 使用RecyClerView做列表展示页面,使用ListView不得分,轮播图与列表上下联动
- 选择Fresco图片加载框架完成图片加载
- 使用Butterknife完成UI的初始化
Adapter.java package com.bwie.xiaqin.zhoukao1208.adapter; import android.content.Context; import android.support.v7.widget.RecyclerView; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import com.bwie.xiaqin.zhoukao1208.R; import com.bwie.xiaqin.zhoukao1208.bean.lieBean; import java.util.List; /** * Created by lenovo on 2018/12/8. */ public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { private Context context; private List<lieBean.DataBean.DatasBean> list; public MyAdapter(Context context, List<lieBean.DataBean.DatasBean> list) { this.context = context; this.list = list; } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { //获得条目 return new ViewHolder(View.inflate(context, R.layout.layout_adapter, null)); } @Override public void onBindViewHolder(ViewHolder holder, int position) { // superChapterName;title;niceDate;chapterName /** * 将接口数据进行赋值 * 由于没有图片,所以就没有获取 */ holder.rxxp_te_getSuperChapterName.setText(list.get(position).getSuperChapterName()); holder.rxxp_te_getNiceDate.setText(list.get(position).getNiceDate()); holder.rxxp_te_getTitle.setText(list.get(position).getTitle()); holder.rxxp_te_getChapterName.setText(list.get(position).getChapterName()); } @Override public int getItemCount() { return list.size(); } public class ViewHolder extends RecyclerView.ViewHolder { TextView rxxp_te_getSuperChapterName; TextView rxxp_te_getNiceDate; TextView rxxp_te_getTitle; TextView rxxp_te_getChapterName; public ViewHolder(View itemView) { super(itemView); //获得控件id rxxp_te_getSuperChapterName = (TextView) itemView.findViewById(R.id.rxxp_te_getSuperChapterName); rxxp_te_getNiceDate = (TextView) itemView.findViewById(R.id.rxxp_te_getNiceDate); rxxp_te_getTitle = (TextView) itemView.findViewById(R.id.rxxp_te_getTitle); rxxp_te_getChapterName = (TextView) itemView.findViewById(R.id.rxxp_te_getChapterName); } } }
App.java
package com.bwie.xiaqin.zhoukao1208.app; import android.app.Application; import com.facebook.drawee.backends.pipeline.Fresco; /** * Created by lenovo on 2018/12/8. */ public class App extends Application{ @Override public void onCreate() { super.onCreate(); Fresco.initialize(this); } }
baseAcitvity.java
package com.bwie.xiaqin.zhoukao1208.base.bactivity; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; /** * Created by lenovo on 2018/12/8. */ public class BaseActivity extends AppCompatActivity{ @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); } }
BasePreseneter.java
package com.bwie.xiaqin.zhoukao1208.base.presenter; import com.bwie.xiaqin.zhoukao1208.base.BaseView; /** * Created by lenovo on 2018/12/8. */ public class BasePresenter<V extends BaseView> { private V iv; public void attachView(V iv){ this.iv = iv; } public void detachView(){ this.iv = null; } public V getView(){ return iv; } }
BaseView.java
package com.bwie.xiaqin.zhoukao1208.base; /** * Created by lenovo on 2018/12/8. */ public interface BaseView { }
bean bannerBean.java
package com.bwie.xiaqin.zhoukao1208.bean; import java.util.List; public class BannerBean { /** * data : [{"desc":"一起来做个App吧","id":10,"imagePath":"http://www.wanandroid.com/blogimgs/50c115c2-cf6c-4802-aa7b-a4334de444cd.png","isVisible":1,"order":3,"title":"一起来做个App吧","type":0,"url":"http://www.wanandroid.com/blog/show/2"},{"desc":"","id":4,"imagePath":"http://www.wanandroid.com/blogimgs/ab17e8f9-6b79-450b-8079-0f2287eb6f0f.png","isVisible":1,"order":0,"title":"看看别人的面经,搞定面试~","type":1,"url":"http://www.wanandroid.com/article/list/0?cid=73"},{"desc":"","id":3,"imagePath":"http://www.wanandroid.com/blogimgs/fb0ea461-e00a-482b-814f-4faca5761427.png","isVisible":1,"order":1,"title":"兄弟,要不要挑个项目学习下?","type":1,"url":"http://www.wanandroid.com/project"},{"desc":"","id":6,"imagePath":"http://www.wanandroid.com/blogimgs/62c1bd68-b5f3-4a3c-a649-7ca8c7dfabe6.png","isVisible":1,"order":1,"title":"我们新增了一个常用导航Tab~","type":1,"url":"http://www.wanandroid.com/navi"},{"desc":"","id":18,"imagePath":"http://www.wanandroid.com/blogimgs/00f83f1d-3c50-439f-b705-54a49fc3d90d.jpg","isVisible":1,"order":1,"title":"公众号文章列表强势上线","type":1,"url":"http://www.wanandroid.com/wxarticle/list/408/1"},{"desc":"","id":2,"imagePath":"http://www.wanandroid.com/blogimgs/90cf8c40-9489-4f9d-8936-02c9ebae31f0.png","isVisible":1,"order":2,"title":"JSON工具","type":1,"url":"http://www.wanandroid.com/tools/bejson"},{"desc":"","id":5,"imagePath":"http://www.wanandroid.com/blogimgs/acc23063-1884-4925-bdf8-0b0364a7243e.png","isVisible":1,"order":3,"title":"微信文章合集","type":1,"url":"http://www.wanandroid.com/blog/show/6"}] * errorCode : 0 * errorMsg : */ private int errorCode; private String errorMsg; private List<DataBean> data; public int getErrorCode() { return errorCode; } public void setErrorCode(int errorCode) { this.errorCode = errorCode; } public String getErrorMsg() { return errorMsg; } public void setErrorMsg(String errorMsg) { this.errorMsg = errorMsg; } public List<DataBean> getData() { return data; } public void setData(List<DataBean> data) { this.data = data; } public static class DataBean { /** * desc : 一起来做个App吧 * id : 10 * imagePath : http://www.wanandroid.com/blogimgs/50c115c2-cf6c-4802-aa7b-a4334de444cd.png * isVisible : 1 * order : 3 * title : 一起来做个App吧 * type : 0 * url : http://www.wanandroid.com/blog/show/2 */ private String desc; private int id; private String imagePath; private int isVisible; private int order; private String title; private int type; private String url; public String getDesc() { return desc; } public void setDesc(String desc) { this.desc = desc; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getImagePath() { return imagePath; } public void setImagePath(String imagePath) { this.imagePath = imagePath; } public int getIsVisible() { return isVisible; } public void setIsVisible(int isVisible) { this.isVisible = isVisible; } public int getOrder() { return order; } public void setOrder(int order) { this.order = order; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public int getType() { return type; } public void setType(int type) { this.type = type; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } } }
lieBean.java 列表
package com.bwie.xiaqin.zhoukao1208.bean; import java.util.List; public class lieBean { /** * data : {"curPage":1,"datas":[{"apkLink":"","author":" Ruheng","chapterId":390,"chapterName":"Git","collect":false,"courseId":13,"desc":"","envelopePic":"","fresh":false,"id":7632,"link":"https://juejin.im/post/599e14875188251240632702","niceDate":"1天前","origin":"","projectLink":"","publishTime":1544113919000,"superChapterId":390,"superChapterName":"项目管理","tags":[],"title":"一篇文章,教你学会Git","type":0,"userId":-1,"visible":1,"zan":0},{"apkLink":"","author":"SupKing_a520","chapterId":171,"chapterName":"binder","collect":false,"courseId":13,"desc":"","envelopePic":"","fresh":false,"id":7631,"link":"https://www.jianshu.com/p/c1daf5653a47","niceDate":"1天前","origin":"","projectLink":"","publishTime":1544113884000,"superChapterId":171,"superChapterName":"framework","tags":[],"title":"Android:从源码角度来赏析Binder机制的优美","type":0,"userId":-1,"visible":1,"zan":0},{"apkLink":"","author":" Roll圈圈","chapterId":355,"chapterName":"他人收集","collect":false,"courseId":13,"desc":"","envelopePic":"","fresh":false,"id":7630,"link":"https://www.jianshu.com/p/2d1a3ba27e76","niceDate":"1天前","origin":"","projectLink":"","publishTime":1544113860000,"superChapterId":349,"superChapterName":"开放API","tags":[],"title":"开放通用Api,总有你喜欢的","type":0,"userId":-1,"visible":1,"zan":0},{"apkLink":"","author":"辰之猫","chapterId":60,"chapterName":"Android Studio相关","collect":false,"courseId":13,"desc":"","envelopePic":"","fresh":false,"id":7629,"link":"https://www.jianshu.com/p/e54db232df62","niceDate":"1天前","origin":"","projectLink":"","publishTime":1544113821000,"superChapterId":60,"superChapterName":"开发环境","tags":[],"title":"让你明明白白的使用RecyclerView——SnapHelper详解","type":0,"userId":-1,"visible":1,"zan":0},{"apkLink":"","author":"鸿洋","chapterId":408,"chapterName":"鸿洋","collect":false,"courseId":13,"desc":"","envelopePic":"","fresh":false,"id":7633,"link":"https://mp.weixin.qq.com/s/cLhf-SSS3I5SkPEFd5Cxbw","niceDate":"1天前","origin":"","projectLink":"","publishTime":1544112000000,"superChapterId":408,"superChapterName":"公众号","tags":[{"name":"公众号","url":"/wxarticle/list/408/1"}],"title":"不到100行代码实现左右对齐TextView","type":0,"userId":-1,"visible":1,"zan":0},{"apkLink":"","author":"code小生","chapterId":414,"chapterName":"code小生","collect":false,"courseId":13,"desc":"","envelopePic":"","fresh":false,"id":7634,"link":"https://mp.weixin.qq.com/s/i1GfYke-9419uYsZgCMiJg","niceDate":"1天前","origin":"","projectLink":"","publishTime":1544112000000,"superChapterId":408,"superChapterName":"公众号","tags":[{"name":"公众号","url":"/wxarticle/list/414/1"}],"title":"对 Kotlin 与 Java 编程语言的思考","type":0,"userId":-1,"visible":1,"zan":0},{"apkLink":"","author":"郭霖","chapterId":409,"chapterName":"郭霖","collect":false,"courseId":13,"desc":"","envelopePic":"","fresh":false,"id":7635,"link":"https://mp.weixin.qq.com/s/cBISvWo8TnvlJ3oSKJ544g","niceDate":"1天前","origin":"","projectLink":"","publishTime":1544112000000,"superChapterId":408,"superChapterName":"公众号","tags":[{"name":"公众号","url":"/wxarticle/list/409/1"}],"title":"30张图带你彻底理解红黑树","type":0,"userId":-1,"visible":1,"zan":0},{"apkLink":"","author":"辰之猫","chapterId":100,"chapterName":"RecyclerView","collect":false,"courseId":13,"desc":"","envelopePic":"","fresh":false,"id":7627,"link":"https://www.jianshu.com/p/d1ab5f6be73f","niceDate":"1天前","origin":"","projectLink":"","publishTime":1544111204000,"superChapterId":179,"superChapterName":"5.+高新技术","tags":[],"title":"Android组件化——SXRecyclerView","type":0,"userId":-1,"visible":1,"zan":0},{"apkLink":"","author":"NightFarmer","chapterId":375,"chapterName":"Flutter","collect":false,"courseId":13,"desc":"","envelopePic":"","fresh":false,"id":7626,"link":"https://www.jianshu.com/p/26b32dc2087e","niceDate":"1天前","origin":"","projectLink":"","publishTime":1544110868000,"superChapterId":375,"superChapterName":"跨平台","tags":[],"title":"Android工程内嵌Flutter,跨平台的渐进式解决方案","type":0,"userId":-1,"visible":1,"zan":0},{"apkLink":"","author":"mandypig","chapterId":99,"chapterName":"具体案例","collect":false,"courseId":13,"desc":"","envelopePic":"","fresh":false,"id":7590,"link":"https://www.jianshu.com/p/7241ed34346a","niceDate":"1天前","origin":"","projectLink":"","publishTime":1544110372000,"superChapterId":94,"superChapterName":"自定义控件","tags":[],"title":"不到100行代码实现左右对齐TextView","type":0,"userId":-1,"visible":1,"zan":0},{"apkLink":"","author":"gityuan","chapterId":78,"chapterName":"性能优化","collect":false,"courseId":13,"desc":"","envelopePic":"","fresh":false,"id":7622,"link":"http://gityuan.com/2016/01/02/memory-analysis-command/","niceDate":"1天前","origin":"","projectLink":"","publishTime":1544093713000,"superChapterId":79,"superChapterName":"热门专题","tags":[],"title":"Android内存分析命令","type":0,"userId":-1,"visible":1,"zan":0},{"apkLink":"","author":"看书的小蜗牛","chapterId":86,"chapterName":"图片处理","collect":false,"courseId":13,"desc":"","envelopePic":"","fresh":false,"id":7621,"link":"https://www.jianshu.com/p/d5714e8987f3","niceDate":"1天前","origin":"","projectLink":"","publishTime":1544092914000,"superChapterId":87,"superChapterName":"图片加载","tags":[],"title":"Android Bitmap变迁与原理解析(4.x-8.x)","type":0,"userId":-1,"visible":1,"zan":0},{"apkLink":"","author":"鸿洋","chapterId":408,"chapterName":"鸿洋","collect":false,"courseId":13,"desc":"","envelopePic":"","fresh":false,"id":7623,"link":"https://mp.weixin.qq.com/s/Vt__FGCcWftanYW5ndyXmA","niceDate":"2天前","origin":"","projectLink":"","publishTime":1544025600000,"superChapterId":408,"superChapterName":"公众号","tags":[{"name":"公众号","url":"/wxarticle/list/408/1"}],"title":"RecyclerView库中被我们忽略的部分","type":0,"userId":-1,"visible":1,"zan":0},{"apkLink":"","author":"code小生","chapterId":414,"chapterName":"code小生","collect":false,"courseId":13,"desc":"","envelopePic":"","fresh":false,"id":7624,"link":"https://mp.weixin.qq.com/s/99eQ1_9wzYYByNTIrzOVfA","niceDate":"2天前","origin":"","projectLink":"","publishTime":1544025600000,"superChapterId":408,"superChapterName":"公众号","tags":[{"name":"公众号","url":"/wxarticle/list/414/1"}],"title":"Android 设备唯一标识(多种实现方案)","type":0,"userId":-1,"visible":1,"zan":0},{"apkLink":"","author":"Jamin_正宗红罐辣酱","chapterId":252,"chapterName":"奇怪的Bug","collect":false,"courseId":13,"desc":"","envelopePic":"","fresh":false,"id":7617,"link":"https://www.jianshu.com/p/18950c9b0ec9","niceDate":"2天前","origin":"","projectLink":"","publishTime":1544005813000,"superChapterId":135,"superChapterName":"项目必备","tags":[],"title":"从Daemons到finalize timed out after 10 seconds","type":0,"userId":-1,"visible":1,"zan":0},{"apkLink":"","author":"Jamin_正宗红罐辣酱","chapterId":252,"chapterName":"奇怪的Bug","collect":false,"courseId":13,"desc":"","envelopePic":"","fresh":false,"id":7616,"link":"https://www.jianshu.com/p/84e7a99e8467","niceDate":"2天前","origin":"","projectLink":"","publishTime":1544005797000,"superChapterId":135,"superChapterName":"项目必备","tags":[],"title":"Android Crash的防护与追踪","type":0,"userId":-1,"visible":1,"zan":0},{"apkLink":"","author":"鸿洋","chapterId":408,"chapterName":"鸿洋","collect":false,"courseId":13,"desc":"","envelopePic":"","fresh":false,"id":7618,"link":"https://mp.weixin.qq.com/s/WP8kUvcyHETlkDIdvGktdA","niceDate":"2018-12-05","origin":"","projectLink":"","publishTime":1543939200000,"superChapterId":408,"superChapterName":"公众号","tags":[{"name":"公众号","url":"/wxarticle/list/408/1"}],"title":"Android高斯模糊你所不知道的坑","type":0,"userId":-1,"visible":1,"zan":0},{"apkLink":"","author":"code小生","chapterId":414,"chapterName":"code小生","collect":false,"courseId":13,"desc":"","envelopePic":"","fresh":false,"id":7619,"link":"https://mp.weixin.qq.com/s/dq_wBsp1sUYA2M_oW9hv4Q","niceDate":"2018-12-05","origin":"","projectLink":"","publishTime":1543939200000,"superChapterId":408,"superChapterName":"公众号","tags":[{"name":"公众号","url":"/wxarticle/list/414/1"}],"title":"OPPO Android 开发技术面总结","type":0,"userId":-1,"visible":1,"zan":0},{"apkLink":"","author":"郭霖","chapterId":409,"chapterName":"郭霖","collect":false,"courseId":13,"desc":"","envelopePic":"","fresh":false,"id":7620,"link":"https://mp.weixin.qq.com/s/kcbEto2ljhhCSNknIWtbzA","niceDate":"2018-12-05","origin":"","projectLink":"","publishTime":1543939200000,"superChapterId":408,"superChapterName":"公众号","tags":[{"name":"公众号","url":"/wxarticle/list/409/1"}],"title":"Android Monitor工具详解大全","type":0,"userId":-1,"visible":1,"zan":0},{"apkLink":"","author":"zqljintu","chapterId":294,"chapterName":"完整项目","collect":false,"courseId":13,"desc":"网上有各种各样的免费API,在众里寻找后,最后发现何不将这些API集合在一个App中呢,鉴于个人能力有限,就选取了部分的API来创作。 感谢知乎日报的Api,提供了App中的日报板块。 感谢豆瓣的Api,提供了App中的电影板块。 感谢WanAndroid的Api,提供了开发板块。 感谢Gank.io的Api,提供了娱乐版块","envelopePic":"http://wanandroid.com/blogimgs/271a4c3f-8066-4038-b4e6-9e5756463403.png","fresh":false,"id":7612,"link":"http://www.wanandroid.com/blog/show/2445","niceDate":"2018-12-04","origin":"","projectLink":"https://github.com/zqljintu/Assembly-number","publishTime":1543928671000,"superChapterId":294,"superChapterName":"开源项目主Tab","tags":[{"name":"项目","url":"/project/list/1?cid=294"}],"title":"集结号//Assembly-number——集合了多项内容的客户端","type":0,"userId":-1,"visible":1,"zan":0}],"offset":0,"over":false,"pageCount":289,"size":20,"total":5779} * errorCode : 0 * errorMsg : */ private DataBean data; private int errorCode; private String errorMsg; public DataBean getData() { return data; } public void setData(DataBean data) { this.data = data; } public int getErrorCode() { return errorCode; } public void setErrorCode(int errorCode) { this.errorCode = errorCode; } public String getErrorMsg() { return errorMsg; } public void setErrorMsg(String errorMsg) { this.errorMsg = errorMsg; } public static class DataBean { /** * curPage : 1 * datas : [{"apkLink":"","author":" Ruheng","chapterId":390,"chapterName":"Git","collect":false,"courseId":13,"desc":"","envelopePic":"","fresh":false,"id":7632,"link":"https://juejin.im/post/599e14875188251240632702","niceDate":"1天前","origin":"","projectLink":"","publishTime":1544113919000,"superChapterId":390,"superChapterName":"项目管理","tags":[],"title":"一篇文章,教你学会Git","type":0,"userId":-1,"visible":1,"zan":0},{"apkLink":"","author":"SupKing_a520","chapterId":171,"chapterName":"binder","collect":false,"courseId":13,"desc":"","envelopePic":"","fresh":false,"id":7631,"link":"https://www.jianshu.com/p/c1daf5653a47","niceDate":"1天前","origin":"","projectLink":"","publishTime":1544113884000,"superChapterId":171,"superChapterName":"framework","tags":[],"title":"Android:从源码角度来赏析Binder机制的优美","type":0,"userId":-1,"visible":1,"zan":0},{"apkLink":"","author":" Roll圈圈","chapterId":355,"chapterName":"他人收集","collect":false,"courseId":13,"desc":"","envelopePic":"","fresh":false,"id":7630,"link":"https://www.jianshu.com/p/2d1a3ba27e76","niceDate":"1天前","origin":"","projectLink":"","publishTime":1544113860000,"superChapterId":349,"superChapterName":"开放API","tags":[],"title":"开放通用Api,总有你喜欢的","type":0,"userId":-1,"visible":1,"zan":0},{"apkLink":"","author":"辰之猫","chapterId":60,"chapterName":"Android Studio相关","collect":false,"courseId":13,"desc":"","envelopePic":"","fresh":false,"id":7629,"link":"https://www.jianshu.com/p/e54db232df62","niceDate":"1天前","origin":"","projectLink":"","publishTime":1544113821000,"superChapterId":60,"superChapterName":"开发环境","tags":[],"title":"让你明明白白的使用RecyclerView——SnapHelper详解","type":0,"userId":-1,"visible":1,"zan":0},{"apkLink":"","author":"鸿洋","chapterId":408,"chapterName":"鸿洋","collect":false,"courseId":13,"desc":"","envelopePic":"","fresh":false,"id":7633,"link":"https://mp.weixin.qq.com/s/cLhf-SSS3I5SkPEFd5Cxbw","niceDate":"1天前","origin":"","projectLink":"","publishTime":1544112000000,"superChapterId":408,"superChapterName":"公众号","tags":[{"name":"公众号","url":"/wxarticle/list/408/1"}],"title":"不到100行代码实现左右对齐TextView","type":0,"userId":-1,"visible":1,"zan":0},{"apkLink":"","author":"code小生","chapterId":414,"chapterName":"code小生","collect":false,"courseId":13,"desc":"","envelopePic":"","fresh":false,"id":7634,"link":"https://mp.weixin.qq.com/s/i1GfYke-9419uYsZgCMiJg","niceDate":"1天前","origin":"","projectLink":"","publishTime":1544112000000,"superChapterId":408,"superChapterName":"公众号","tags":[{"name":"公众号","url":"/wxarticle/list/414/1"}],"title":"对 Kotlin 与 Java 编程语言的思考","type":0,"userId":-1,"visible":1,"zan":0},{"apkLink":"","author":"郭霖","chapterId":409,"chapterName":"郭霖","collect":false,"courseId":13,"desc":"","envelopePic":"","fresh":false,"id":7635,"link":"https://mp.weixin.qq.com/s/cBISvWo8TnvlJ3oSKJ544g","niceDate":"1天前","origin":"","projectLink":"","publishTime":1544112000000,"superChapterId":408,"superChapterName":"公众号","tags":[{"name":"公众号","url":"/wxarticle/list/409/1"}],"title":"30张图带你彻底理解红黑树","type":0,"userId":-1,"visible":1,"zan":0},{"apkLink":"","author":"辰之猫","chapterId":100,"chapterName":"RecyclerView","collect":false,"courseId":13,"desc":"","envelopePic":"","fresh":false,"id":7627,"link":"https://www.jianshu.com/p/d1ab5f6be73f","niceDate":"1天前","origin":"","projectLink":"","publishTime":1544111204000,"superChapterId":179,"superChapterName":"5.+高新技术","tags":[],"title":"Android组件化——SXRecyclerView","type":0,"userId":-1,"visible":1,"zan":0},{"apkLink":"","author":"NightFarmer","chapterId":375,"chapterName":"Flutter","collect":false,"courseId":13,"desc":"","envelopePic":"","fresh":false,"id":7626,"link":"https://www.jianshu.com/p/26b32dc2087e","niceDate":"1天前","origin":"","projectLink":"","publishTime":1544110868000,"superChapterId":375,"superChapterName":"跨平台","tags":[],"title":"Android工程内嵌Flutter,跨平台的渐进式解决方案","type":0,"userId":-1,"visible":1,"zan":0},{"apkLink":"","author":"mandypig","chapterId":99,"chapterName":"具体案例","collect":false,"courseId":13,"desc":"","envelopePic":"","fresh":false,"id":7590,"link":"https://www.jianshu.com/p/7241ed34346a","niceDate":"1天前","origin":"","projectLink":"","publishTime":1544110372000,"superChapterId":94,"superChapterName":"自定义控件","tags":[],"title":"不到100行代码实现左右对齐TextView","type":0,"userId":-1,"visible":1,"zan":0},{"apkLink":"","author":"gityuan","chapterId":78,"chapterName":"性能优化","collect":false,"courseId":13,"desc":"","envelopePic":"","fresh":false,"id":7622,"link":"http://gityuan.com/2016/01/02/memory-analysis-command/","niceDate":"1天前","origin":"","projectLink":"","publishTime":1544093713000,"superChapterId":79,"superChapterName":"热门专题","tags":[],"title":"Android内存分析命令","type":0,"userId":-1,"visible":1,"zan":0},{"apkLink":"","author":"看书的小蜗牛","chapterId":86,"chapterName":"图片处理","collect":false,"courseId":13,"desc":"","envelopePic":"","fresh":false,"id":7621,"link":"https://www.jianshu.com/p/d5714e8987f3","niceDate":"1天前","origin":"","projectLink":"","publishTime":1544092914000,"superChapterId":87,"superChapterName":"图片加载","tags":[],"title":"Android Bitmap变迁与原理解析(4.x-8.x)","type":0,"userId":-1,"visible":1,"zan":0},{"apkLink":"","author":"鸿洋","chapterId":408,"chapterName":"鸿洋","collect":false,"courseId":13,"desc":"","envelopePic":"","fresh":false,"id":7623,"link":"https://mp.weixin.qq.com/s/Vt__FGCcWftanYW5ndyXmA","niceDate":"2天前","origin":"","projectLink":"","publishTime":1544025600000,"superChapterId":408,"superChapterName":"公众号","tags":[{"name":"公众号","url":"/wxarticle/list/408/1"}],"title":"RecyclerView库中被我们忽略的部分","type":0,"userId":-1,"visible":1,"zan":0},{"apkLink":"","author":"code小生","chapterId":414,"chapterName":"code小生","collect":false,"courseId":13,"desc":"","envelopePic":"","fresh":false,"id":7624,"link":"https://mp.weixin.qq.com/s/99eQ1_9wzYYByNTIrzOVfA","niceDate":"2天前","origin":"","projectLink":"","publishTime":1544025600000,"superChapterId":408,"superChapterName":"公众号","tags":[{"name":"公众号","url":"/wxarticle/list/414/1"}],"title":"Android 设备唯一标识(多种实现方案)","type":0,"userId":-1,"visible":1,"zan":0},{"apkLink":"","author":"Jamin_正宗红罐辣酱","chapterId":252,"chapterName":"奇怪的Bug","collect":false,"courseId":13,"desc":"","envelopePic":"","fresh":false,"id":7617,"link":"https://www.jianshu.com/p/18950c9b0ec9","niceDate":"2天前","origin":"","projectLink":"","publishTime":1544005813000,"superChapterId":135,"superChapterName":"项目必备","tags":[],"title":"从Daemons到finalize timed out after 10 seconds","type":0,"userId":-1,"visible":1,"zan":0},{"apkLink":"","author":"Jamin_正宗红罐辣酱","chapterId":252,"chapterName":"奇怪的Bug","collect":false,"courseId":13,"desc":"","envelopePic":"","fresh":false,"id":7616,"link":"https://www.jianshu.com/p/84e7a99e8467","niceDate":"2天前","origin":"","projectLink":"","publishTime":1544005797000,"superChapterId":135,"superChapterName":"项目必备","tags":[],"title":"Android Crash的防护与追踪","type":0,"userId":-1,"visible":1,"zan":0},{"apkLink":"","author":"鸿洋","chapterId":408,"chapterName":"鸿洋","collect":false,"courseId":13,"desc":"","envelopePic":"","fresh":false,"id":7618,"link":"https://mp.weixin.qq.com/s/WP8kUvcyHETlkDIdvGktdA","niceDate":"2018-12-05","origin":"","projectLink":"","publishTime":1543939200000,"superChapterId":408,"superChapterName":"公众号","tags":[{"name":"公众号","url":"/wxarticle/list/408/1"}],"title":"Android高斯模糊你所不知道的坑","type":0,"userId":-1,"visible":1,"zan":0},{"apkLink":"","author":"code小生","chapterId":414,"chapterName":"code小生","collect":false,"courseId":13,"desc":"","envelopePic":"","fresh":false,"id":7619,"link":"https://mp.weixin.qq.com/s/dq_wBsp1sUYA2M_oW9hv4Q","niceDate":"2018-12-05","origin":"","projectLink":"","publishTime":1543939200000,"superChapterId":408,"superChapterName":"公众号","tags":[{"name":"公众号","url":"/wxarticle/list/414/1"}],"title":"OPPO Android 开发技术面总结","type":0,"userId":-1,"visible":1,"zan":0},{"apkLink":"","author":"郭霖","chapterId":409,"chapterName":"郭霖","collect":false,"courseId":13,"desc":"","envelopePic":"","fresh":false,"id":7620,"link":"https://mp.weixin.qq.com/s/kcbEto2ljhhCSNknIWtbzA","niceDate":"2018-12-05","origin":"","projectLink":"","publishTime":1543939200000,"superChapterId":408,"superChapterName":"公众号","tags":[{"name":"公众号","url":"/wxarticle/list/409/1"}],"title":"Android Monitor工具详解大全","type":0,"userId":-1,"visible":1,"zan":0},{"apkLink":"","author":"zqljintu","chapterId":294,"chapterName":"完整项目","collect":false,"courseId":13,"desc":"网上有各种各样的免费API,在众里寻找后,最后发现何不将这些API集合在一个App中呢,鉴于个人能力有限,就选取了部分的API来创作。 感谢知乎日报的Api,提供了App中的日报板块。 感谢豆瓣的Api,提供了App中的电影板块。 感谢WanAndroid的Api,提供了开发板块。 感谢Gank.io的Api,提供了娱乐版块","envelopePic":"http://wanandroid.com/blogimgs/271a4c3f-8066-4038-b4e6-9e5756463403.png","fresh":false,"id":7612,"link":"http://www.wanandroid.com/blog/show/2445","niceDate":"2018-12-04","origin":"","projectLink":"https://github.com/zqljintu/Assembly-number","publishTime":1543928671000,"superChapterId":294,"superChapterName":"开源项目主Tab","tags":[{"name":"项目","url":"/project/list/1?cid=294"}],"title":"集结号//Assembly-number——集合了多项内容的客户端","type":0,"userId":-1,"visible":1,"zan":0}] * offset : 0 * over : false * pageCount : 289 * size : 20 * total : 5779 */ private int curPage; private int offset; private boolean over; private int pageCount; private int size; private int total; private List<DatasBean> datas; public int getCurPage() { return curPage; } public void setCurPage(int curPage) { this.curPage = curPage; } public int getOffset() { return offset; } public void setOffset(int offset) { this.offset = offset; } public boolean isOver() { return over; } public void setOver(boolean over) { this.over = over; } public int getPageCount() { return pageCount; } public void setPageCount(int pageCount) { this.pageCount = pageCount; } public int getSize() { return size; } public void setSize(int size) { this.size = size; } public int getTotal() { return total; } public void setTotal(int total) { this.total = total; } public List<DatasBean> getDatas() { return datas; } public void setDatas(List<DatasBean> datas) { this.datas = datas; } public static class DatasBean { /** * apkLink : * author : Ruheng * chapterId : 390 * chapterName : Git * collect : false * courseId : 13 * desc : * envelopePic : * fresh : false * id : 7632 * link : https://juejin.im/post/599e14875188251240632702 * niceDate : 1天前 * origin : * projectLink : * publishTime : 1544113919000 * superChapterId : 390 * superChapterName : 项目管理 * tags : [] * title : 一篇文章,教你学会Git * type : 0 * userId : -1 * visible : 1 * zan : 0 */ private String apkLink; private String author; private int chapterId; private String chapterName; private boolean collect; private int courseId; private String desc; private String envelopePic; private boolean fresh; private int id; private String link; private String niceDate; private String origin; private String projectLink; private long publishTime; private int superChapterId; private String superChapterName; private String title; private int type; private int userId; private int visible; private int zan; private List<?> tags; public String getApkLink() { return apkLink; } public void setApkLink(String apkLink) { this.apkLink = apkLink; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public int getChapterId() { return chapterId; } public void setChapterId(int chapterId) { this.chapterId = chapterId; } public String getChapterName() { return chapterName; } public void setChapterName(String chapterName) { this.chapterName = chapterName; } public boolean isCollect() { return collect; } public void setCollect(boolean collect) { this.collect = collect; } public int getCourseId() { return courseId; } public void setCourseId(int courseId) { this.courseId = courseId; } public String getDesc() { return desc; } public void setDesc(String desc) { this.desc = desc; } public String getEnvelopePic() { return envelopePic; } public void setEnvelopePic(String envelopePic) { this.envelopePic = envelopePic; } public boolean isFresh() { return fresh; } public void setFresh(boolean fresh) { this.fresh = fresh; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getLink() { return link; } public void setLink(String link) { this.link = link; } public String getNiceDate() { return niceDate; } public void setNiceDate(String niceDate) { this.niceDate = niceDate; } public String getOrigin() { return origin; } public void setOrigin(String origin) { this.origin = origin; } public String getProjectLink() { return projectLink; } public void setProjectLink(String projectLink) { this.projectLink = projectLink; } public long getPublishTime() { return publishTime; } public void setPublishTime(long publishTime) { this.publishTime = publishTime; } public int getSuperChapterId() { return superChapterId; } public void setSuperChapterId(int superChapterId) { this.superChapterId = superChapterId; } public String getSuperChapterName() { return superChapterName; } public void setSuperChapterName(String superChapterName) { this.superChapterName = superChapterName; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public int getType() { return type; } public void setType(int type) { this.type = type; } public int getUserId() { return userId; } public void setUserId(int userId) { this.userId = userId; } public int getVisible() { return visible; } public void setVisible(int visible) { this.visible = visible; } public int getZan() { return zan; } public void setZan(int zan) { this.zan = zan; } public List<?> getTags() { return tags; } public void setTags(List<?> tags) { this.tags = tags; } } } }
home View.java
package com.bwie.xiaqin.zhoukao1208.home.view; import com.bwie.xiaqin.zhoukao1208.base.BaseView; import com.bwie.xiaqin.zhoukao1208.bean.BannerBean; import com.bwie.xiaqin.zhoukao1208.bean.lieBean; /** * Created by lenovo on 2018/12/8. */ public interface BannerView extends BaseView { void OnHomeBannerSuccess(BannerBean bannerBean); void OnHomeCommoditySuccess(lieBean.DataBean homeCommodityBean); }
Model
package com.bwie.xiaqin.zhoukao1208.home.model; import com.bwie.xiaqin.zhoukao1208.bean.BannerBean; import com.bwie.xiaqin.zhoukao1208.bean.lieBean; import com.bwie.xiaqin.zhoukao1208.utils.HttpUtils; import io.reactivex.Observable; /** * Created by lenovo on 2018/12/8. */ public class Model { public Observable<BannerBean> getHomeBanner(){//轮播图的 Observable<BannerBean> banner = HttpUtils.getInstence().api.getBanner(); return banner; } public Observable<lieBean> getCommodity(){//列表的 Observable<lieBean> commodity = HttpUtils.getInstence().api.getCommodity(); return commodity; } }
BannerPresenter.java
package com.bwie.xiaqin.zhoukao1208.home.presenter; import com.bwie.xiaqin.zhoukao1208.base.presenter.BasePresenter; import com.bwie.xiaqin.zhoukao1208.bean.BannerBean; import com.bwie.xiaqin.zhoukao1208.home.model.Model; import com.bwie.xiaqin.zhoukao1208.home.view.BannerView; import io.reactivex.Observer; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.Disposable; import io.reactivex.schedulers.Schedulers; /** * Created by lenovo on 2018/12/8. */ public class BannerPresener extends BasePresenter<BannerView> { private final Model homeModel; public BannerPresener(){ homeModel = new Model(); } public void getHomeBanner(){ homeModel.getHomeBanner() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<BannerBean>() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(BannerBean bannerBean) { if (bannerBean!=null){ getView().OnHomeBannerSuccess(bannerBean); } } @Override public void onError(Throwable e) { } @Override public void onComplete() { } }); } }
liePresenter.java
package com.bwie.xiaqin.zhoukao1208.home.presenter; import com.bwie.xiaqin.zhoukao1208.base.presenter.BasePresenter; import com.bwie.xiaqin.zhoukao1208.bean.lieBean; import com.bwie.xiaqin.zhoukao1208.home.model.Model; import com.bwie.xiaqin.zhoukao1208.home.view.BannerView; import io.reactivex.Observer; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.Disposable; import io.reactivex.schedulers.Schedulers; /** * Created by lenovo on 2018/12/8. */ public class liePresenter extends BasePresenter<BannerView>{ private static final String TAG = "HomeCommodityPresenter"; private final Model homeCommodityModel; public liePresenter(){ homeCommodityModel= new Model(); } public void getHot(){ homeCommodityModel.getCommodity() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<lieBean>() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(lieBean homeCommodityBean) { if (homeCommodityBean!=null){ lieBean.DataBean data = homeCommodityBean.getData(); getView().OnHomeCommoditySuccess(data); } } @Override public void onError(Throwable e) { } @Override public void onComplete() { } }); } }
utils
HttpUtils.java
package com.bwie.xiaqin.zhoukao1208.utils; import java.io.IOException; import okhttp3.Interceptor; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; import retrofit2.Retrofit; import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory; import retrofit2.converter.gson.GsonConverterFactory; /** * Created by lenovo on 2018/12/8. */ public class HttpUtils { public final Api api; private HttpUtils(){ OkHttpClient client = new OkHttpClient.Builder().addNetworkInterceptor(new Logging()).build(); Retrofit retrofit = new Retrofit.Builder() .baseUrl(cont.url) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .client(client) .build(); api = retrofit.create(Api.class); } private class Logging implements Interceptor { @Override public Response intercept(Chain chain) throws IOException { Request request = chain.request(); Request.Builder builder = request.newBuilder().addHeader("soucre", "android"); Response proceed = chain.proceed(request); return proceed; } } private static class GetDataNet{ public static HttpUtils httpUtils = new HttpUtils(); } public static HttpUtils getInstence(){ return GetDataNet.httpUtils; } }
Api.java
package com.bwie.xiaqin.zhoukao1208.utils; import com.bwie.xiaqin.zhoukao1208.bean.BannerBean; import com.bwie.xiaqin.zhoukao1208.bean.lieBean; import io.reactivex.Observable; import retrofit2.http.GET; /** * Created by lenovo on 2018/12/8. */ public interface Api { @GET("banner/json") Observable<BannerBean> getBanner(); @GET("article/list/0/json") Observable<lieBean> getCommodity(); }
cont.java
package com.bwie.xiaqin.zhoukao1208.utils; /** * Created by lenovo on 2018/12/8. */ public class cont { public static final String url = "http://www.wanandroid.com/"; }
主页面MainActivity.java
package com.bwie.xiaqin.zhoukao1208; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.StaggeredGridLayoutManager; import com.bwie.xiaqin.zhoukao1208.adapter.MyAdapter; import com.bwie.xiaqin.zhoukao1208.bean.BannerBean; import com.bwie.xiaqin.zhoukao1208.bean.lieBean; import com.bwie.xiaqin.zhoukao1208.home.presenter.BannerPresener; import com.bwie.xiaqin.zhoukao1208.home.presenter.liePresenter; import com.bwie.xiaqin.zhoukao1208.home.view.BannerView; import com.recker.flybanner.FlyBanner; import java.util.ArrayList; import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.Unbinder; public class MainActivity extends AppCompatActivity implements BannerView{ List<String> imagebean = new ArrayList<>(); BannerPresener homeBannerPresenter; liePresenter homeCommodityPresenter; MyAdapter home_hot_line_adapter; @BindView(R.id.flyBanner) FlyBanner flyBanner; @BindView(R.id.re_recyclerView) RecyclerView reRecyclerView; Unbinder unbinder; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); unbinder= ButterKnife.bind(this); homeBannerPresenter= new BannerPresener(); homeBannerPresenter.attachView(this); homeBannerPresenter.getHomeBanner(); homeCommodityPresenter= new liePresenter(); homeCommodityPresenter.attachView(this); homeCommodityPresenter.getHot(); } @Override public void OnHomeBannerSuccess(BannerBean bannerBean) { List<BannerBean.DataBean> result = bannerBean.getData(); for (int i = 0; i < result.size(); i++) { imagebean.add(result.get(i).getImagePath()); } flyBanner.setImagesUrl(imagebean);//将得到的图片数据添加 } @Override public void OnHomeCommoditySuccess(lieBean.DataBean homeCommodityBean) { List<lieBean.DataBean.DatasBean> datas = homeCommodityBean.getDatas(); StaggeredGridLayoutManager gridLayoutManager = new StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.VERTICAL); reRecyclerView.setLayoutManager(gridLayoutManager); home_hot_line_adapter = new MyAdapter(this,datas); reRecyclerView.setAdapter(home_hot_line_adapter); } @Override protected void onDestroy() { super.onDestroy(); unbinder.unbind(); homeCommodityPresenter.detachView(); homeBannerPresenter.detachView(); } }
这个是主页面的xml
activity_main
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.bwie.xiaqin.zhoukao1208.MainActivity"> <com.recker.flybanner.FlyBanner android:id="@+id/flyBanner" android:padding="5dp" android:layout_width="match_parent" android:layout_height="200dp"></com.recker.flybanner.FlyBanner> <android.support.v7.widget.RecyclerView android:layout_marginTop="10dp" android:id="@+id/re_recyclerView" android:layout_width="match_parent" android:layout_height="wrap_content"></android.support.v7.widget.RecyclerView> </LinearLayout>
这个是adapterxml
layout_adapter
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:orientation="vertical" android:layout_height="match_parent"> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:layout_marginLeft="10dp" android:id="@+id/rxxp_te_getSuperChapterName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="rxxp_te_getChapterName" /> <TextView android:id="@+id/rxxp_te_getNiceDate" android:textColor="#dcdada" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:text="rxxp_te_getChapterName" /> </RelativeLayout> <TextView android:layout_marginLeft="10dp" android:textColor="#000000" android:textStyle="bold" android:textSize="22sp" android:id="@+id/rxxp_te_getTitle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="rxxp_te_getTitle" /> <TextView android:layout_marginLeft="10dp" android:textColor="#39f2da" android:id="@+id/rxxp_te_getChapterName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="rxxp_te_getChapterName" /> <View android:layout_width="match_parent" android:layout_height="10dp" android:background="#b1b0b0" /> </LinearLayout>