月度归档:2016年06月

仿知乎日报开发历程(二)

上一篇大概介绍了一下结构,这篇负责展示。主要涉及到的知识点有:

  1. RecyclerView 展示新闻列表;
  2. 嵌套 Fragment 的 ViewPager 来展示可以左右滑动的新闻详情页;
  3. 头部 Banner 的实现;
  4. 夜间模式的实现。

首页

首页主要分为上部的 banner 和下部的新闻 list。

Banner

  1. 用 ViewPager 实现。参考:ViewPager实现Banner循环播放
  2. 实现过程中,出现 ViewPager 不响应 OnClick 事件的问题,解决方法:onClick on ViewPager not triggered

List

  1. 用 RecyclerView 实现。参考:RecyclerView使用详解(一)
  2. RecyclerView headerView。引用:RecyclerViewHeader
  3. 底部自动加载。参考:通过重写OnScrollListener来监听RecyclerView是否滑动到底部
  4. CardView 背景。参考:关于使用 CardView 开发过程中要注意的细节, CardView Corner Radius

下拉刷新

  1. 使用官方的 swiperefreshlayout 实现。
  2. 初次进入自动加载。参考:SwipeRefreshLayout setRefreshing not showing indicator initially

详情页

使用 Fragment 加载新闻的详情,外层嵌套 ViewPager 来实现左右滑动切换新闻。具体的新闻内容是 WebView 负责,在其上边显示一些图片信息。

  1. WebView 和 ScrollView 的滑动冲突。参考:http://stackoverflow.com/questions/9842494/how-to-prevent-a-scrollview-from-scrolling-to-a-webview-after-data-is-loaded
  2. FragmentStatePagerAdapter 加载失败。Fragment 的 onCreate 只会调用一次,而 onCreateView 每次都会调用。

夜间模式

使用 AppCompatDelegate。 参考:夜晚的故事(android夜间模式实现)

WebView 的夜间模式主要依赖于

Extra

更好的移动端数据库: Realm

本想使用 Realm 来存储新闻,但是其中的坑还是蛮多的。折腾了几天放弃了。

坑1:不支持 List 类型,需要额外的操作;

坑2:不支持多线程之间传递 RealmObject ,我不知道怎么发送我的 RxEvent 事件了;

坑3:序列化,因为使用了 Gson 来解析 Json 数据,不得不再做额外的操作;

坑4:Realm 对象需要及时的 close,建议在 onCreate 中 get,onDestroy 中 close。但是夜间模式切换时需要调用 recreate 方法,会导致引用到 closed 的对象。不清楚该怎么搞。

搞来搞去还是决定放弃了,重新使用 SQLite 就 ok 。