美文网首页week.ioAndroid UI的收集Android代码封装
一个实现城市选择、联系人选择的库

一个实现城市选择、联系人选择的库

作者: YoKey | 来源:发表于2016-03-27 19:32 被阅读2406次

    2016-10-9 更:

    进行一次几乎重写的大规模重构:

    1、从ListView更改为RecyclerView的实现

    2、性能优化,更易使用的API,更易拓展的HeaderView等等.**

    改版后的Github传送门

    相关阅读:[设计模式]记一次开源库的重构历程


    这个月被楼上拉走做了一个月的苦力,总算闲下来了,水一篇简书先。

    楼上app改版有个的城市选择页面,需求就是带字母索引的城市选择ListView/RecyclerView,在github上找了一圈,发现要么是功能有限的封装库,要么就是没有经过封装的Demo。所以呢,最终决定自己造轮子--IndexableStickyListView。

    10几20行代码就可以轻松实现带有 城市选择、搜索 or 联系人选择、搜索等功能的界面。

    效果图

    先看Demo效果,提供2种类型的悬浮提示框,个人更喜欢图2中的Material Design风格的右侧气泡炫悬浮框。

    常规居中悬浮框.gif
    MD风格气泡悬浮框.gif

    特性

    1、根据数据源,自动排序生成字母索引Bar,以及字母Header

    2、字母Header是粘性的(Sticky)

    3、ListView中的Item,可以完全自由定制、拓展

    4、绑定数据源、搜索等功能,都是异步的,通过HandlerThread优化实现

    5、自由添加Header数据(GPS定位、热门城市功能),ListView的addHeaderView功能也可以随意使用

    6、提供2种悬浮提示View,常规居中 以及 MD风格的右侧气泡

    工作过程

    1、初始化、绑定数据
    用一个简单的图来表示吧(IndexBar就是右侧的字母条)

    IndexableStickyListView工作过程.png

    2、搜索、过滤数据
    对于搜索,首先我们要确保数据搜索过程是异步的,不然在数据比较多的情况下,肯定会掉帧卡顿的。

    这部分我单独写了一篇简书介绍:[Android]谈谈“搜索”,2种场景下的最优解

    最后

    该库还需要后续的维护和优化,比如使用的pinyin4j.jar过大,效率也不高,下一步打算替换成更小的拼音转化库。
    现在使用TinyPinyin库替换了Pinyin4j.jar库,体积减小108K,速度提升了4倍!

    在使用中有任何问题,随时可以联系我。

    最后再次放上源码地址,点这里,点这里

    相关文章

      网友评论

      • 菜小东:虽然实现看起来复杂,但是使用起来超级容易,这真的是作者的良心之作,之前看过好多实现这样功能的代码,要么就是不好扩展,要么就是使用起来很不方便!大神,请收下我的膝盖~~
      • c730e67cc751:如果Item的布局是动态添加的(意味着每一个Item不仅仅是简单的显示文本,有可能是显示一个网格的情况),则会报异常:位置在IndexableLayout 352行 nextTitleView.getTop()报空指针异常,我这边尝试了一下修复,在351行添加一个判断 nextTitleView != null 解决。 希望早日修复。
      • kaikaifly:看你github上还没更新, 我直接这么用compile 'me.yokeyword:indexablerecyclerview:1.0.6'吗
      • kaikaifly:快速滑动城市列表的时候,字母序号会错乱,望回复!
        YoKey:@kaikaifly 嗯 发现了~ 稍后修复 :pray:
        kaikaifly: @YoKey 你快速的滑动到底部,本应该显示的是Z,而实际上是Y,
        YoKey:@kaikaifly Demo上的吗? 怎么复现?
      • 6a8448d15923:用你这个显示联系人时,用例子里的模拟数据可以正常显示,但是用我从手机里查出来的list。setDates之后却不显示,也没有报任何错误,什么情况啊?用的数据类型都是一模一样的
        6a8448d15923:@Damon_魏先森 直接把你demo里的模拟数据减少点,也不显示了,你可以试下
        6a8448d15923:@YoKey 并没有看出什么问题,我测试机上只有6条联系人数据,运行就不显示,但是运行到我自己的手机上有260条数据就可以正常显示,怎么数据少了就不显示啊? :flushed:
        YoKey:@Damon_魏先森 检查下,调用时机~ 查看日志
      • b097161c867f:囧,我前几天参照Telegram搞了一个,Header是Pin在左边
      • c43344eaa8c0:如果我addhead是自定义的,怎么解决java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification的异常
        YoKey:@c43344eaa8c0 看简信~ 暂时有2个方案,这个是刷新UI时的一个非线程安全问题,已经修复了一些情况,后续我找到根源会修复它
      • jdsjlzx:有没有RecylerView版本的呢
        YoKey:@jdsjlzx 莫有 =。= 为了更好的适用性,没有写RecyclerView的版本~
      • 73ce2d72d1b2:@YoKey 请问这个库除了能用在城市选择、联系人选择这两个方面外,还可以用在其它方面吗?比如单词列表等等?谢谢
        YoKey: @刘韦声 只要是需要根据字母排序显示内容的 应该都是可以的
      • artshell:一直想找一个这种demo, 学习下,终于找到了,github上也找过,看过源码太乱, 感谢博主
      • Marno:很赞,很实用
      • Alex_Cin:好牛逼
        YoKey:@Alex_Cin 夸张了夸张了~ :joy:

      本文标题:一个实现城市选择、联系人选择的库

      本文链接:https://www.haomeiwen.com/subject/prfjlttx.html