2016-10-9 更:
進行一次幾乎重寫的大規(guī)模重構(gòu):
1、從ListView更改為RecyclerView的實現(xiàn)
2、性能優(yōu)化,更易使用的API,更易拓展的HeaderView等等.**
相關(guān)閱讀:[設(shè)計模式]記一次開源庫的重構(gòu)歷程
這個月被樓上拉走做了一個月的苦力,總算閑下來了,水一篇簡書先。
樓上app改版有個的城市選擇頁面,需求就是帶字母索引的城市選擇ListView/RecyclerView,在github上找了一圈,發(fā)現(xiàn)要么是功能有限的封裝庫,要么就是沒有經(jīng)過封裝的Demo。所以呢,最終決定自己造輪子--IndexableStickyListView。
10幾20行代碼就可以輕松實現(xiàn)帶有 城市選擇、搜索 or 聯(lián)系人選擇、搜索等功能的界面。
效果圖
先看Demo效果,提供2種類型的懸浮提示框,個人更喜歡圖2中的Material Design風(fēng)格的右側(cè)氣泡炫懸浮框。


特性
1、根據(jù)數(shù)據(jù)源,自動排序生成字母索引Bar,以及字母Header
2、字母Header是粘性的(Sticky)
3、ListView中的Item,可以完全自由定制、拓展
4、綁定數(shù)據(jù)源、搜索等功能,都是異步的,通過HandlerThread優(yōu)化實現(xiàn)
5、自由添加Header數(shù)據(jù)(GPS定位、熱門城市功能),ListView的addHeaderView功能也可以隨意使用
6、提供2種懸浮提示View,常規(guī)居中 以及 MD風(fēng)格的右側(cè)氣泡
工作過程
1、初始化、綁定數(shù)據(jù)
用一個簡單的圖來表示吧(IndexBar就是右側(cè)的字母條)

2、搜索、過濾數(shù)據(jù)
對于搜索,首先我們要確保數(shù)據(jù)搜索過程是異步的,不然在數(shù)據(jù)比較多的情況下,肯定會掉幀卡頓的。
這部分我單獨寫了一篇簡書介紹:[Android]談?wù)劇八阉鳌保?種場景下的最優(yōu)解
最后
該庫還需要后續(xù)的維護和優(yōu)化,比如使用的pinyin4j.jar過大,效率也不高,下一步打算替換成更小的拼音轉(zhuǎn)化庫。
現(xiàn)在使用TinyPinyin庫替換了Pinyin4j.jar庫,體積減小108K,速度提升了4倍!
在使用中有任何問題,隨時可以聯(lián)系我。
最后再次放上源碼地址,點這里,點這里