1. Contacts模块列表界面Adapter结构:
下图是联系人模块列表窗口对应的Adapter类图:
从上一篇文章Contacts模块Fragment结构中已知,联系人列表界面中的ListView的Adapter大部分继承自 ContactEntryListAdapter。
而从该类图中可知:
ContactEntryListAdapter最终继承自CompositeCursorAdapter并实现了PinnedHeaderListView.PinnedHeaderAdapter接口,也就是说界面中的ListView均为自定义的PinnedHeaderListView,例如在原生的Contacts主界面中,会根据联系人拼音的首字母分类,并显示在每个分类的第一个Item上(A,B,C…Z)。在ContactEntryListAdapter的父类IndexerListAdapter中有一个SectionIndexer(ContactsSectionIndexer) mIndexer成员变量,从源码中可以知道该类是用来管理联系人的每一个分类标签(A,B,C…Z)显示在ListView的哪个位置的。
public ContactsSectionIndexer(String[] sections, int[] counts) {
…...
this.mSections = sections;
mPosition