真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

AndroidLoader的使用以及手機(jī)通訊錄的獲取方法

Android的主線程中執(zhí)行長(zhǎng)時(shí)間操作,導(dǎo)致界面無(wú)響應(yīng),會(huì)引起ANR。如果需要執(zhí)行較長(zhǎng)時(shí)間的操作,一般會(huì)在另一個(gè)線程處理,然后將數(shù)據(jù)轉(zhuǎn)交給主線程進(jìn)行顯示,Android本身為我們提供了一些機(jī)制處理這種情況,今天就來(lái)看看Loader。Loader主要用來(lái)在Activity和Fragment中異步加載數(shù)據(jù),使用也非常簡(jiǎn)單。

10余年的遂寧網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。全網(wǎng)營(yíng)銷推廣的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整遂寧建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)建站從事“遂寧網(wǎng)站設(shè)計(jì)”,“遂寧網(wǎng)站推廣”以來(lái),每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

Loader的初始化非常簡(jiǎn)單,Activity提供了獲取LoaderManager的接口,之后調(diào)用LoaderManager的initLoader即可。initLoader接受三個(gè)參數(shù):

Loader的唯一標(biāo)識(shí)符ID,用來(lái)區(qū)分多個(gè)Loader;

傳遞給Loader的參數(shù),可選;

Loader的回調(diào)。

銷毀Loader,只需要使用LoaderManager的destoryLoader即可,參數(shù)只傳遞一個(gè)Loader的ID。

Loader的回調(diào)接口LoaderCallbacks有三個(gè)方法:

public interface LoaderCallbacks {
	Loader onCreateLoader(int var1, Bundle var2);

	void onLoadFinished(Loader var1, D var2);

	void onLoaderReset(Loader var1);
}

onCreateLoader在Loader創(chuàng)建時(shí)被調(diào)用;

onLoadFinished在Loader加載數(shù)據(jù)完成時(shí)調(diào)用;

onLoaderReset在Loader被reset時(shí)被調(diào)用。

Loader接口就這些,我們通過(guò)一個(gè)實(shí)際的應(yīng)用案例看看怎么使用Loader,這里選擇了手機(jī)通信錄的獲取,獲取手機(jī)的通信錄信息,需要使用Phone的ContentProvider,下面例子中詳細(xì)來(lái)看。

由于要訪問(wèn)通信錄,需要在manifest文件添加權(quán)限:

 
 

activity_main.xml非常的簡(jiǎn)單,就包括一個(gè)ListView,用來(lái)顯示通訊錄列表。

<?xml version="1.0" encoding="utf-8"?>


  

MainActivity類的代碼比較長(zhǎng),我們分解來(lái)看,MainActivity要實(shí)現(xiàn)LoaderCallbacks接口

class MainActivity : AppCompatActivity(), LoaderManager.LoaderCallbacks { 

使用Kotlin的伙伴對(duì)象,定義了靜態(tài)成員變量,LOADER_ID是Loader的ID,PHONE_PROJECTION是查詢通訊錄時(shí)希望查找的列集合

companion object { 
  private val LOADER_ID = 0 
  private val PHONE_PROJECTION = arrayOf(Phone._ID, Phone.DISPLAY_NAME, Phone.NUMBER) 
}

onCreate使用SimpleCursorAdapter作為L(zhǎng)istView的Adapter,然后調(diào)用initLoader初始化了Loader

private var mAdapter:SimpleCursorAdapter? = null

override fun onCreate(savedInstanceState: Bundle?) {
	super.onCreate(savedInstanceState)
	setContentView(R.layout.activity_main)

	mAdapter = SimpleCursorAdapter(this,
			android.R.layout.simple_list_item_2,
			null,
			arrayOf(Phone.DISPLAY_NAME, Phone.NUMBER),
			intArrayOf(android.R.id.text1, android.R.id.text2),
			0)
	listView.adapter = mAdapter
	listView.onItemClickListener = AdapterView.OnItemClickListener {
		_, _, position, _ ->
		val cursor = listView.getItemAtPosition(position) as Cursor
		val displayNameIndex = cursor.getColumnIndex(Phone.DISPLAY_NAME)
		Toast.makeText(this, cursor.getString(displayNameIndex), Toast.LENGTH_SHORT).show()
	}

	loaderManager.initLoader(LOADER_ID, null, this)
}

onDestory銷毀Loader

override fun onDestroy() { 
  super.onDestroy() 
  loaderManager.destroyLoader(LOADER_ID) 
} 

三個(gè)回調(diào)方法:

override fun onCreateLoader(id: Int, bundle: Bundle?): Loader {
	return CursorLoader(this,
			Phone.CONTENT_URI,
			PHONE_PROJECTION,
			null,
			null,
			Phone.DISPLAY_NAME)
}

override fun onLoaderReset(cursor: Loader?) {
	mAdapter?.swapCursor(null)
}

override fun onLoadFinished(loader: Loader?, cursor: Cursor?) {
	mAdapter?.swapCursor(cursor)
}

onCreateLoader創(chuàng)建了一個(gè)CursorLoader,該Loader回執(zhí)行ContentProvider的操作,然后返回一個(gè)cursor;

onLoaderReset時(shí),將Adapter中的cursor置null;

onLoadFinished時(shí),由于CursorLoader查詢完數(shù)據(jù),會(huì)返回新的cursor,我們使用新的Cursor去替換之前Adapter中的cursor。

這樣,我們就可以在Activity啟動(dòng)時(shí)自動(dòng)異步加載數(shù)據(jù)了,手機(jī)上試試,可以發(fā)現(xiàn),加載非常順暢。github已上傳代碼。

以上這篇Android Loader的使用以及手機(jī)通訊錄的獲取方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持創(chuàng)新互聯(lián)。


新聞名稱:AndroidLoader的使用以及手機(jī)通訊錄的獲取方法
標(biāo)題鏈接:http://weahome.cn/article/jhcccd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部