連絡先は解決します

联系人显示
相关类
パッケージ/アプリケーション/連絡先/ SRC / COM /アンドロイド/連絡先/活動/ PeopleActivity.java
パッケージ/アプリケーション/連絡先/ SRC / COM /アンドロイド/連絡先/リスト/ DefaultContactBrowseListFragment.java
パッケージ/アプリケーション/コンタクト/ SRC /com/android/contacts/list/DefaultContactListAdapter.javaの
パッケージ/アプリケーション/連絡先/ SRC / COM /アンドロイド/連絡先/リスト/ ContactEntryListFragment.javaの
パッケージ/アプリケーション/連絡先/ SRC / COM /アンドロイド/連絡先/リスト/ ContactEntryListAdapter.java
パッケージ/アプリケーション/連絡先/ SRC / COM /アンドロイド/連絡先/リスト/ DirectoryPartition.java
パッケージ/アプリケーション/連絡先/ SRC / COM /アンドロイド/連絡先/リスト/ DirectoryListLoader.java
パッケージ/アプリ/連絡先/ SRC / COM /アンドロイド/連絡先/ quickcontact / QuickContactActivity.java
パッケージ/アプリケーション/連絡先/ SRC / COM /アンドロイド/連絡先/モデル/ ContactLoader.java

連絡先リストのデータロード処理

 


連絡先のルートディレクトリにあるのAndroidManifest.xmlファイルを開きPeopleActivity属性を表示次のとおりです。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<活性
アンドロイド:名= "activities.PeopleActivity。"
アンドロイド:alwaysRetainTaskState = "true"の
アンドロイド:launchMode = "singleTop"
アンドロイド:resizeableActivity = "true"の
アンドロイド:テーマ= "@スタイル/ LaunchScreenTheme"
アンドロイド:visibleToInstantApps = "真"
>
<意図-フィルタ>
<アクションアンドロイド:名= "android.intent.action.MAIN" />
<カテゴリアンドロイド:名= "android.intent。 category.DEFAULT "/>
<カテゴリアンドロイド:名=" android.intent.category。ランチャー "/>
<カテゴリアンドロイド:名= "android.intent.category.BROWSABLE" />
<カテゴリアンドロイド:名= "android.intent.category.APP_CONTACTS" />
</フィルタ意図>
PeopleActivityであるランチャー連絡先アプリケーションインターフェイスは、このように開口連絡先アプリケーション、最初の負荷PeopleActivity、createViewsAndFragmentsのコンタクトインターフェースを作成する()メソッド

DefaultContactBrowseListFragmentにすべての連絡先のsetUpListFragment()メソッドのフラグメントの作成

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
プライベートボイドsetUpListFragment(FragmentManager fragmentManager){
mContactsListFragment =(DefaultContactBrowseListFragment)
fragmentManager.findFragmentByTag(TAG_ALL)。
//判断mContactsListFragment为空则创建フラグメント
IF(mContactsListFragment == NULL){
mContactsListFragment =新しいDefaultContactBrowseListFragment()。
mContactsListFragment.setAnimateOnLoad(真の);
fragmentManager.beginTransaction()
.add(R.id.contacts_list_container、mContactsListFragment、TAG_ALL)
.commit();
fragmentManager.executePendingTransactions();
}
//フラグメントの一連の初期化は、配置された
、mContactsListFragment.setContactsAvailable(areContactsAvailable())
mContactsListFragment.setListType(mContactListFilterController.getFilterListType())を、
mContactsListFragment.setParameters(/ * * ContactsRequest 、/ mrequest
;)falseにfromOnNewIntent / / * *
}
データロード後に作成されたコンタクトインターフェースの全てについて、データがDirectoryListLoaderを使用してロードされ、ローダシステムローダAsyncTaskLoaderから継承

DirectoryListLoaderウリは、ディレクトリのカテゴリContactContactsから直接DirectoryPartition.mContentUriからデータを読み込むのではなく、

。1
2
3
4
5
6
7
8
9
10
11
12は、
13である
14
15
16
17
18である
。19
20であり、
21は
22である
23である
24
25
26である
27
28
29
30
民間最終静的クラスDirectoryQuery {
//クエリデータ照合
のpublic static final列ORDER_BY =ディレクトリ。 _ID;
//クエリは、ルール
のpublic static final文字列[] = {PROJECTION
Directory._ID、
Directory.PACKAGE_NAME、
Directory.TYPE_RESOURCE_ID、
Directory.DISPLAY_NAME、
Directory.PHOTO_SUPPORTを
}。
静的int型ID =最終公共0;
パブリックstatic int型PACKAGE_NAME =最終1;
公共の静的INT TYPE_RESOURCE_IDファイナル= 2;
公共の静的int型DISPLAY_NAMEは=ファイナル3;
公共の静的int型PHOTO_SUPPORT =ファイナル4;
//ウリクエリを取得し、トラッキングコードを見ることができ、 Directory.ENTERPRISE_CONTENT_URIアンドロイド25のみの放出は、接合後
//ContactsUtils.java
; //パブリック静的ブールFLAG_N_FEATURE =最終Build.VERSION.SDK_INT> = 24
のpublic staticウリgetDirectoryUri(INTモード){
IF(MODE == SEARCH_MODE_DATA_SHORTCUT || == SEARCH_MODE_CONTACT_SHORTCUTモード){
Directory.CONTENT_URIを返す;
}他の{
(DirectoryCompat.getContentUriを返す);
}
}
}
DirectoryPartitionデータロード処理の連絡先情報に基づいて、キャッシュメモリパッケージで管理した後、負荷の連絡先情報、内部これは、3つのデータ・ロードのステータス情報を提供します

1
2
3
パブリックstatic int型STATUS_NOT_LOADEDファイナル= 0; //データをロードすることができなかった
のpublic static final int型STATUS_LOADING = 1; // データがロードされている
のpublic static final int型STATUS_LOADED = 2; // データがロードされた
連絡先の詳細ページのロード処理


インタフェースクラスの連絡先の詳細あなたがQuickContactActivity lookupUriに起動したときに他のポータルを通じてQuickContactActivity、一般的な連絡先の詳細は、開始されたがテントで渡されなければならない、または彼らは、画面を閉じます)(仕上がりを呼び出します

AsyncTaskLoaderから継承されているようなデータロードプロセスのローダーContactLoaderリストと連絡先の詳細は、理解するためにコードを見ることができます

。1
2
3
4
5
6
7
8
9
10
11
12である
13である
14
15
16
17
18である
。19
20
21であり、
22は
23である
24
25
プライベートボイドprocessIntent(インテントインテント){
//ここではさまざまなコール仕上げ決意()連絡先をロードします画面を閉じるには、独自の合法性を決定するために失敗した後
...
//読み込むことができ、再び開くためにキャッシュをロードするために、連絡先をoldLookupUriをしていた使用速く
mLookupUri = lookupUri;
mExcludeMimes = intent.getStringArrayExtra(QuickContact.EXTRA_EXCLUDE_MIMES) ;
IF(oldLookupUri == NULL){
//ログインする必要がありますだけでなく、向きの変更IF
mShouldLog = mIsRecreatedInstance !;
。mContactLoader =(ContactLoader)getLoaderManager()initLoader(
LOADER_CONTACT_ID、ヌル、mLoaderContactCallbacks)。
}それ以外の場合(oldLookupUri!= mLookupUri){
リロードが発生したとき//は関係なく、姿勢の変化、ログインする必要があります。
mShouldLog =はtrue。
//ディレクトリの連絡先をコピーした後、連絡先URIが変更されます。そのため、
//私たちは、新しい連絡先をリロードする必要があります。
destroyInteractionLoaders(http://www.amjmh.com/v/BIBRGZ_558768/)。
mContactLoader =(ContactLoader)(ローダ<?>)getLoaderManager()getLoader(。
LOADER_CONTACT_ID);
mContactLoader.setNewLookup(mLookupUri)。
mCachedCp2DataCardModel = NULL;
}
//最后通过ContactLoader开启联系人数据加载
mContactLoader.forceLoad()。
}
----------------

おすすめ

転載: www.cnblogs.com/ly570/p/11414321.html