美文网首页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倍!

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

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

相关文章

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

    2016-10-9 更: 进行一次几乎重写的大规模重构: 1、从ListView更改为RecyclerView的实...

  • RN--城市选择

    1、城市选择 2、React-Native实现高性能城市列表/联系人列表。 转自:https://www.jian...

  • Flutter国家选择 2022-06-07 周二

    简介 城市选择,联系人选择,国家选择等等一般都会做成一个单独的选择页面。 由于数据较多,一般会按照字母顺序排序分类...

  • iOS9之后获取通信录

    一.ContactsUI的使用使用步骤创建选择联系人控制器设置代理实现代理方法(在代理方法中拿到用户选择的联系人)...

  • 系统SDK介绍-01

    访问联系人,并选择信息 拨号 发送短信 发送邮件 本地通知 接口文件 实现文件

  • 城市选择列表的实现

    特别感谢github项目 直接上效果图 使用到的第三方依赖,具体详情请参照片头github链接 1.布局分析 布局...

  • React Native实现城市选择列表,仿联系人列表

    项目地址源码地址点我如果有不懂的问题,可以在评论区留言, 看到了就回复,每天都能回复

  • Vue.js第7课-项目实战-城市列表开发(part01)

    一、城市选择页面路由配置 点击首页右上角的城市,会跳一个城市选择的页面,现在我们先来实现这个跳转的功能。 首先在 ...

  • ReactNative实现城市选择列表

    引言 使用RN开发了一段时间,最近遇到了一个比较棘手的问题,就是用react写个城市选择列表,当然这个如果用And...

  • 娜美raa的365天

    一个城市熟悉又陌生的气味,这个想要实现理想的城市。 人们总会面临各种各样的选择。 大概很多人都会在选择自己的理...

网友评论

  • 菜小东:虽然实现看起来复杂,但是使用起来超级容易,这真的是作者的良心之作,之前看过好多实现这样功能的代码,要么就是不好扩展,要么就是使用起来很不方便!大神,请收下我的膝盖~~
  • 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