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