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'


0 0
原创粉丝点击