Android RecyclerView使用详解(三)
2016-07-21 10:38
501 查看
在上一篇(RecyclerView使用详解(二))文章中介绍了RecyclerView的多Item布局实现,接下来要来讲讲RecyclerView的Cursor实现,相较于之前的实现,Cursor有更多的使用场景,也更加的常用,特别是配合LoaderManager和CursorLoader进行数据的缓存及加载显示,基于此我们来重点看看RecyclerView的CursorAdapter具体要怎么实现。
##一、CursorAdapter实现(配合LoaderManager和CursorLoader)
如果之前你用过ListView实现过此功能(CursorAdapter),那么你一定对下面这两个方法并不陌生
其中newView方法是用来创建Item布局的,bindView 方法是用来绑定当前View数据的,就相当于之前的getView方法拆成了两个方法实现。
如果你用RecyclerView,你会发现CursorAdapter这个类没有了,既然没有了,那我们就自己仿照着ListView的CursorAdapter类来实现,具体的代码没什么大的出入,无非就是注册两个观察者去监听数据库数据的变化,但是有两个地方需要注意一下,一个就是hasStableIds() 这个方法RecyclerView.Adapter中不能复写父类的方法,需要在初始化的时候调用setHasStableIds(true); 来完成相同功能,第二个就是notifyDataSetInvalidated() 这个方法没有,统一修改成notifyDataSetChanged() 方法即可。
怎么样,是不是很简单,没错,就是这么简单,这里是完整的BaseAbstractRecycleCursorAdapter代码,用法和ListView的CursorAdapter用法一致,具体的可以看看我的Recyclerview LoaderManager Provider
##二、Item的动画实现 RecyclerView本身就已经实现了ITEM的动画,只需要调用以下几个函数来增删Item即可出现默认动画。
怎么样,是不是很轻松,如果你不满足系统默认动画,那么你可以自定义实现RecyclerView.ItemAnimator的接口方法,实现代码可以参考DefaultItemAnimator.当然,如果你不想自己实现,那么也没关系,这里有人已经写了开源库,你可以去看看recyclerview-animators,这里给出默认动画实现方式代码AnimFragment
##三、嵌套RecycleView
一般是不推荐使用嵌套RecycleView的,和ListView是类似的,遇到这种需要嵌套的View一般都是想别的办法来规避,比如动态AddView,或者通过RecycleView的MultipleItemAdapter来实现,通过设置不同的ItemType布局不同的View,但是有时候会闲麻烦,想直接就用嵌套的方式来做,那么和ListView实现方式不同的是,ListView的实现一般都是继承ListView然后复写onMeasure方法,如下所示:
但是RecycleView的实现方式不再是继承RecycleView来做,而是通过修改LayoutManager的方式,即通过继承LinearLayoutManager GridLayoutManager StaggeredGridLayoutManager来修改子控件的测量,下面给出主要代码:
FullyLinearLayoutManager
FullyGridLayoutManager
##四、效果图如下:
Item默认动画效果
![](https://raw.githubusercontent.com/Frank-Zhu/AndroidRecyclerViewDemo/master/art/anim_1.gif)
嵌套ScrollView效果
![](https://raw.githubusercontent.com/Frank-Zhu/AndroidRecyclerViewDemo/master/art/fully_expanded_1.gif)
最后给出代码下载地址–>Demo Code
##一、CursorAdapter实现(配合LoaderManager和CursorLoader)
如果之前你用过ListView实现过此功能(CursorAdapter),那么你一定对下面这两个方法并不陌生
[代码]java代码:
?如果你用RecyclerView,你会发现CursorAdapter这个类没有了,既然没有了,那我们就自己仿照着ListView的CursorAdapter类来实现,具体的代码没什么大的出入,无非就是注册两个观察者去监听数据库数据的变化,但是有两个地方需要注意一下,一个就是hasStableIds() 这个方法RecyclerView.Adapter中不能复写父类的方法,需要在初始化的时候调用setHasStableIds(true); 来完成相同功能,第二个就是notifyDataSetInvalidated() 这个方法没有,统一修改成notifyDataSetChanged() 方法即可。
[代码]java代码:
?##二、Item的动画实现 RecyclerView本身就已经实现了ITEM的动画,只需要调用以下几个函数来增删Item即可出现默认动画。
[代码]java代码:
?##三、嵌套RecycleView
一般是不推荐使用嵌套RecycleView的,和ListView是类似的,遇到这种需要嵌套的View一般都是想别的办法来规避,比如动态AddView,或者通过RecycleView的MultipleItemAdapter来实现,通过设置不同的ItemType布局不同的View,但是有时候会闲麻烦,想直接就用嵌套的方式来做,那么和ListView实现方式不同的是,ListView的实现一般都是继承ListView然后复写onMeasure方法,如下所示:
[代码]java代码:
?FullyLinearLayoutManager
[代码]java代码:
?[代码]java代码:
?Item默认动画效果
![](https://raw.githubusercontent.com/Frank-Zhu/AndroidRecyclerViewDemo/master/art/anim_1.gif)
嵌套ScrollView效果
![](https://raw.githubusercontent.com/Frank-Zhu/AndroidRecyclerViewDemo/master/art/fully_expanded_1.gif)
最后给出代码下载地址–>Demo Code
相关文章推荐
- Android RecyclerView使用详解(二)
- Android开发工具AS常用技巧篇
- Android实现自动填充短信验证码
- [Android]设置Activity为全屏显示的两种方法
- Android RecyclerView使用详解(一)
- Android and js
- Android 权限大全
- java.lang.NullPointerException at android.support.v7.widget.RecyclerView.computeVerticalScrollOffset
- 大牛们是怎么阅读 Android 系统源码的?
- Android Studio 导入第三方jar包的正确姿势
- 记录Android Studio项目提交到github上的出错处理
- 电脑远程连接android手机
- Android文件存储(写入,读取,删除)
- Android 签名之使用命令行给apk签名
- Android Studio新建一个继承其它类的类
- Android串口通信:串口读写实例
- 学习资源
- Android Studio代码补全快捷键设置
- Android 关于.9图片the file is not a PNG
- Android 通用流行框架记录