Android通讯录RecyclerView实现--带挤压效果
来源:互联网 发布:欧弟加入德云社 知乎 编辑:程序博客网 时间:2024/04/28 06:31
转至:http://blog.csdn.net/u013867301/article/details/51996953
先放效果图
场景
要求做一个通讯录页面,用来存储几千条通讯录数据。
需求
需求主要是联系人的样式,有字母标题,拼音排序,滚动时挤压效果(固定标题)
尝试
简单搜了一下,也许是我的关键词不对,只找到了一个源码。
对不起源码作者,反正是找不到出处了。但是还记得作者有说主要是结合了两个作品,
为 夏神博客Android 实现ListView的A-Z字母排序和过滤搜索功能,实现汉字转成拼音
和 郭神博客Android系统联系人全特效实现(上),分组导航和挤压动画
但是用上手的时候有很多问题。 (注:也可能是我在自己修改的过程中新出现的冲突)
- 第一,拼音解析在代码里,数据量一大,就造成堵塞效果。。尤其在搜索框变化的时候。
- 第二,挤压效果正常情况下可用,但在搜索内容变化的时候,就不再具有了。
- 第三,第一次搜索结果为空时,删除文本,再输入结果为空的搜索内容时,会闪退。
- 第四,Fragment中使用时,固定小标题会弹出等容易修复的小问题。
总之尝试的时候填了很多坑,后来又有莫名的坑。。用着不是很放心,干脆弃了。
解决方案
拼音排序问题
因为通讯录是需要经常更新的,所以直接在后台把存储表中添加一个拼音项。具体实现不是很清楚,应该是用的pinyin4j。
但是几千条数据量有些大,服务器又有些慢,初始化要一分钟多。。干脆初始化直接SQLite读取db文件,数据更新的时候更新修改的记录。
单纯用拼音排序,又填了些小坑,以王维和万国,包拯和鲍鱼为例
- WANGWEI,WANGUO会造成王和万之间的穿插,需要分隔符;
- 也会造成BAOZHENG 和BAOYU 同音字的穿插,需要按音排序之后按字排。
使用的排序语句时 order by pinyin ,最后的格式是:
WANG 王 WEI 维;WAN 万 GUO 国;……注意全拼和字之间要有空格。
(因为SQLite有点弱,有些MySQL方法不能用;如果没有空格,会比较 WANG王 和 WAN万。。)
拼音快速检索栏
上述项目的SideBar被我保留了下来,还是挺好用的。
列表和搜索栏
弃用的第一时间是想自己写一个的,想着要写的话肯定用RecyclerView啊。
然而完全不知道怎么固定头部。。。幸好找到个高级开源sticky-headers-recyclerview
非常好用。
搜索栏比较简单,监听下内容变化,更新adapter就好了。
附:
开发期间看到的通讯录思考
虽然通讯录样式没因为这篇文章改变多少,但是多思考思考还是好的。
多音字作为姓氏的音
只是自己制作过程中的部分情况,其他完善情况暂无。
源码
使用的是AS,注意添加依赖:
compile 'com.android.support:recyclerview-v7:23.4.0'compile 'com.timehop.stickyheadersrecyclerview:library:0.4.3'
- Android通讯录RecyclerView实现--带挤压效果
- Android通讯录RecyclerView实现--带挤压效果
- Android 仿联系人菜单,带字母索引,顶部挤压动画,recyclerview实现联系人页面
- Android实现固定头部信息,挤压动画(类似通讯录)
- Android特效开发(可伸缩View带互相挤压效果 )
- android RecyclerView 实现瀑布流带图库浏览效果
- Android抽屉效果的实现(不挤压,不覆盖)
- Android 通讯录分组导航和挤压动画
- Android RecyclerView实现listview效果
- 前端 jQuery 带侧边栏的手风琴效果实现 不挤压宽度 例天刀官网主页手风琴模块
- Android特效开发(可伸缩View带互相挤压效果 )初级篇
- Android特效开发(可伸缩View带互相挤压效果)进阶篇
- Android特效开发(可伸缩View带互相挤压效果 )初级篇
- listview的分组挤压效果实现
- Unity3d实现扭动挤压浏览效果
- RecyclerView利用ItemDecoration实现头部悬停效果【类似微信通讯录效果】
- android RecyclerView 粘带头部实现
- android 随手记 ——android view特效开发(可伸缩view带互相挤压效果)
- js数据类型和变量命名规范
- Coder学习技术到底重要不重要
- Android studio使用OpenCV代码问题:No implementation found for long org.opencv.core.Mat.n_Mat()
- postgresql数据库分页语句
- MySQL性能优化的20条经验
- Android通讯录RecyclerView实现--带挤压效果
- H5新属性audio音频和 video视频的控制详解(controls)
- 颜色的科学
- Edit Control(编辑框控件)将光标移动到行尾,实现即时显示新内容
- ubuntu14.04 LTS Qt 配置 cmake3.5 和 opencv3.1.0 和 ROS 开发环境
- python实现批量下载
- win10+Opencv3.1+VS2015
- Mysql几种索引类型的区别及适用情况
- 六十四卦