2016-10-9 更:
進行一次幾乎重寫的大規模重構:
1、從ListView更改為RecyclerView的實現
2、性能優化,更易使用的API,更易拓展的HeaderView等等.**
相關閱讀:[設計模式]記一次開源庫的重構歷程
這個月被樓上拉走做了一個月的苦力,總算閑下來了,水一篇簡書先。
樓上app改版有個的城市選擇頁面,需求就是帶字母索引的城市選擇ListView/RecyclerView,在github上找了一圈,發現要么是功能有限的封裝庫,要么就是沒有經過封裝的Demo。所以呢,最終決定自己造輪子--IndexableStickyListView。
10幾20行代碼就可以輕松實現帶有 城市選擇、搜索 or 聯系人選擇、搜索等功能的界面。
效果圖
先看Demo效果,提供2種類型的懸浮提示框,個人更喜歡圖2中的Material Design風格的右側氣泡炫懸浮框。
特性
1、根據數據源,自動排序生成字母索引Bar,以及字母Header
2、字母Header是粘性的(Sticky)
3、ListView中的Item,可以完全自由定制、拓展
4、綁定數據源、搜索等功能,都是異步的,通過HandlerThread優化實現
5、自由添加Header數據(GPS定位、熱門城市功能),ListView的addHeaderView功能也可以隨意使用
6、提供2種懸浮提示View,常規居中 以及 MD風格的右側氣泡
工作過程
1、初始化、綁定數據
用一個簡單的圖來表示吧(IndexBar就是右側的字母條)
2、搜索、過濾數據
對于搜索,首先我們要確保數據搜索過程是異步的,不然在數據比較多的情況下,肯定會掉幀卡頓的。
這部分我單獨寫了一篇簡書介紹:[Android]談談“搜索”,2種場景下的最優解
最后
該庫還需要后續的維護和優化,比如使用的pinyin4j.jar過大,效率也不高,下一步打算替換成更小的拼音轉化庫。
現在使用TinyPinyin庫替換了Pinyin4j.jar庫,體積減小108K,速度提升了4倍!
在使用中有任何問題,隨時可以聯系我。
最后再次放上源碼地址,點這里,點這里