Todo:
- √ CardView 加: 公众号 、 作者、分类、时间。
- √ 主页面的CoordinatorLayout -> hide toolbar
- √ NavigationDrawer
- √ 首页(文章) | 公众号
- √ 公众号 (TabHost + ViewPager)
- √ 文章详情
- √ MPV
- √ 组件化
- √ 贡献者
- 本地缓存
- 启动页
- Banner
- 多渠道打包
- 自定义View - 图标(新)等
- RecyclerView显示动画
- 页面切换过渡动画
- Behavior
- 引入RxJava
Issues:
- 屏幕切换
- RecylerAdapter.ViewHolder setOnClickListener 的最佳实践?
由于 onCreateViewHolder 和 onBindViewHolder 都会被多次调用,直接在这两个方法中 new 一个onClickListener 的实例都会造成对象的反复创建和销毁
所以相对比较好的做法就是在 Adapter 中定义一个接口回调方法,并在 Adapter 中实例化一个这个接口类型的成员变量
在 onCreateViewHolder 方法中调用 ViewHolder 的构造方法,传递这个 listener 的引用给 ViewHolder
在 ViewHolder 的构造方法中为 view 设定 setOnClickListener, 在 onClick 中调用这个接口的回调,把 view 和getLayoutPosition()
传递给回调方法
这样在回调方法中就可以根据传入的view和pos,得到点击的view和位置,做出相关处理。
示例代码: ArticlesListAdapter.java
- Glide
- Retrofit
- OKHttp
- ARouter
Notes:
- Fragment#setArguments(Bundle bundle) 跟 直接在Fragment中加上一个setter/getter有什么区别? A: 区别在于,setArguments设定的参数,在Fragment经历destroy和re-create的过程中会被保存下来,这些参数不需要程序在 onSaveInstanceState 方法中做特殊的处理,就可以在下一次 onCreate 的时候继续获取。对比来说, 如果用setter/getter来存取的话,需要自己考虑 onSaveInstanceState 的实现。
- 不要在子组件styles.xml中添加theme, app组件需要用base里面的theme