这(zhè)是仿(fǎng)QQ好友列表分组悬浮PinnedHeaderExpandableListView下载,关于(yú)实现类似联系人列表,组(zǔ)的头(tóu)部总是(shì)悬浮在listview最顶部的效果,github上面有两个比较(jiào)好的实现,分别(bié)是pinnedSectionListview和pinnedHeaderListView,之所以(yǐ)选择后者(zhě)进行源码解析,是因为(wéi)后者的(de)源码比较简单,便于我们理解实(shí)现的精髓所在。
首先说说(shuō)上一节(jiē)通讯录原型实(shí)现(-)中的RightLettersSlideBar中设计不好的地方,在上(shàng)一节,我们将26个大写字母和#作为字符数组,这样会(huì)导致一种情况就是,加入我(wǒ)们的Listview的数据(jù)中不存(cún)在以“O”开头的字符集,我们的Adapter里面没(méi)有做相应的(de)判断,就会出现很严重的错(cuò)误,导(dǎo)致程序(xù)崩溃。有两(liǎng)种解(jiě)决方案可以解决这个问题,第一就是将每(měi)一个(gè)字符做相应的判断(duàn),没有对应的(de)数据的时候显示上一Section或(huò)者下一个Section的数据(jù)。第二种做法是,动态生成我们的原始(shǐ)导航(háng)数(shù)据的数组,意思就是将我们所有的数据的首字母提取出来(lái),按顺序排列,那(nà)么没(méi)有数据的对(duì)应部分的(de)首(shǒu)字母不会(huì)出现在我们的原(yuán)始字符数组里面,在此我们选择这种做(zuò)法。将RightLettersSlideBar中(zhōng)的charaters数组动态(tài)传入,采(cǎi)用set,get方法读写数(shù)据(jù)。这里就不详细(xì)再将,文章写(xiě)完之后会(huì)将(jiāng)代码贴在后面。里面(miàn)的注释也非常详(xiáng)细,有需要的(de)可(kě)以下载看看(kàn)。
仿QQ好友列表分组(zǔ)悬浮PinnedHeaderExpandableListView只能显示(shì)一级列(liè)表,如果我们需要像QQ好友列(liè)表的那样的效果,就需要用到ExpandableListView,入门新手可能(néng)对(duì)该控件不是很熟悉,下面就详解一下(xià)基本用法,其实跟(gēn)ListView差不多,下面来说一下具(jù)体的使用方法把!
之前学习(xí)了Pulltorefresh,pinnedheaderexpanablelistview 但(dàn)是结合起来还是有点麻(má)烦的。尤(yóu)其是(shì)像(xiàng)QQ这(zhè)种。他(tā)不是单(dān)纯(chún)的第一个当做(zuò)分组。他是分(fèn)组上面还(hái)有几个(gè)按钮,还有搜索框,同(tóng)时可(kě)以滑动,而且(qiě)还可以(yǐ)悬停(tíng)。想了试了好几种方法,都有BUG。最后用的一种方法(fǎ)。
