Android 5.1 Contacts源码分析(四):Contacts模块ListView Adapter结构

来源:互联网 发布:egd网络黄金是否合法 编辑:程序博客网 时间:2024/04/28 10:35

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;    mPositions = new int[counts.length];    int position = 0;    for (int i = 0; i < counts.length; i++) {        …...        mPositions[i] = position;        position += counts[i];    }    mCount = position;}

在ContactEntryListAdapter的newView中会创建一个ContactListItemView对象,在该类中动态绘制每一个联系人的头像,姓名,号码等信息,该类将会在后续内容中详细说明。

@Overrideprotected ContactListItemView newView(...) {    final ContactListItemView view = new ContactListItemView(context, null);    …...}

与Fragment类似,DefaultContactListAdapter:为联系人主界面PeopleActivity中DefaultContactBrowseListFragment的ListView的adapter;
其余的则跟联系人多选择界面有关。

很多优秀的第三方rom中,联系人模块的列表界面很统一,美观,其实个人觉得这应该归功于google的软件工程师们,他们的设计使得我们在二次开发时,只需要做少量的修改,就可以做出统一的效果了,至此,对Contacts模块的UI组成结构已经有了一个整体的认识,在接下来的文章中,我会详细介绍每个界面具体是如何实现的。

1 0