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源码分析