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

Posted ximsfei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 5.1 Contacts源码分析:Contacts模块ListView Adapter结构相关的知识,希望对你有一定的参考价值。

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对象,在该类中动态绘制每一个联系人的头像,姓名,号码等信息,该类将会在后续内容中详细说明。

@Override
protected ContactListItemView newView(...) 
    final ContactListItemView view = new ContactListItemView(context, null);
    …...

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

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

以上是关于Android 5.1 Contacts源码分析:Contacts模块ListView Adapter结构的主要内容,如果未能解决你的问题,请参考以下文章

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

Android 5.1 Contacts源码分析:Contacts模块Fargment结构

Android 5.1 Contacts源码分析:PeopleActivity

Android 5.1系统源码Wifi模块中wifiSettings源码分析

Orchard源码分析(5.1):Host初始化(DefaultOrchardHost.Initialize方法)

Android 5.1 Settings源代码简要分析