一個實現城市選擇、聯系人選擇的庫

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倍!

在使用中有任何問題,隨時可以聯系我。

最后再次放上源碼地址,點這里,點這里

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容