這篇文章主要介紹Android Studio中怎么用List Fragments創(chuàng)建相冊(cè)Gallery,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
10年積累的成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有鞏義免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
AsyncTaskLoaders 以及 Fragments
加載整個(gè)圖片庫(kù)到List是一個(gè)運(yùn)算量比較密集,強(qiáng)度很高任務(wù)。因此,我們希望利用 Android 提供的AsyncTaskLoader 通過異步加載解決這個(gè)問題。在這里,我已經(jīng)寫好了一個(gè)自定義AsyncTaskLoader工具類用加載圖庫(kù)中圖片的。我把它命名為:PhotoGalleryImageProvider,可以在源碼中找到。
Fragments 提供了一種特殊的接口給異步任務(wù)的 Loader 以便于自動(dòng)觸發(fā)異步加載任務(wù)。我們的圖庫(kù)列表在Fragment中看起來如下面的代碼:
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Create an empty loader and pre-initialize the photo list items as an empty list. Context context = getActivity().getBaseContext(); // Set up empty mAdapter mPhotoListItem = new ArrayList() ; mAdapter = new PhotoAdapter(context, R.layout.photo_item, mPhotoListItem, false); // Prepare the loader. Either re-connect with an existing one, // or start a new one. getLoaderManager().initLoader(0, null, this); }
請(qǐng)注意***的這一行:
getLoaderManager().initLoader(0, null, this);
這一行的作用就是自動(dòng)啟用 AsyncLoader。AsyncLoader的相關(guān)代碼放在這個(gè)Class文件的后面。
/** * Loader Handlers for loading the photos in the background. */ @Override public Loader<List> onCreateLoader(int id, Bundle args) { // This is called when a new Loader needs to be created. This // sample only has one Loader with no arguments, so it is simple. return new PhotoGalleryAsyncLoader(getActivity()); }
每次后臺(tái)任務(wù)成功獲取到圖庫(kù)中的圖片時(shí),則會(huì)回調(diào)下面這個(gè)函數(shù):
@Override public void onLoadFinished(Loader<List> loader, List data) { // Set the new data in the mAdapter. mPhotoListItem.clear(); for(int i = 0; i < data.size();i++){ PhotoItem item = data.get(i); mPhotoListItem.add(item); } mAdapter.notifyDataSetChanged(); resolveEmptyText(); cancelProgressDialog(); }
其中,PhotoItem(用作給 Adapter 存儲(chǔ)數(shù)據(jù))的數(shù)組包含了指向所有圖庫(kù)中圖片的縮略圖以及全尺寸圖片的URL。一旦獲取這些數(shù)據(jù),Adapter必定會(huì)通過 “notifyDataSetChanged” 回調(diào)來通知出去,從而刷新當(dāng)前的圖片列表。
通過游標(biāo)(cursor)來獲取縮略圖
之前我提到過,我已經(jīng)提供了一個(gè)工具類可以用游標(biāo)方便的去獲取圖庫(kù)中圖片的縮略圖,這個(gè)工具類叫做“PhotoGalleryImageProvider”。這個(gè)類的主要用法如下:
/** * Fetch both full sized images and thumbnails via a single query. * Returns all images not in the Camera Roll. * @param context * @return */ public static List getAlbumThumbnails(Context context){ final String[] projection = {MediaStore.Images.Thumbnails.DATA,MediaStore.Images.Thumbnails.IMAGE_ID}; Cursor thumbnailsCursor = context.getContentResolver().query( MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, projection, // Which columns to return null, // Return all rows null, null); ... return result; }
直接用Android 提供的Cursors 去后臺(tái)獲取圖片是比較簡(jiǎn)單的一種用法。另一種高級(jí)的用法則是使用 CursorLoader 來操作Cursor。CursorLoader 內(nèi)建了一個(gè) AsyncTaskLoader 可以用來自動(dòng)處理后臺(tái)的加載進(jìn)程。由于需要同時(shí)渲染獲取到圖片的縮略圖和完整尺寸的圖片,所以盡管使用帶有CursorLoader的AsyncTask 也可以得到同樣的結(jié)果,但我還是選擇了寫一個(gè)自定義的Task Loader。
以上是“Android Studio中怎么用List Fragments創(chuàng)建相冊(cè)Gallery”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
網(wǎng)頁名稱:AndroidStudio中怎么用ListFragments創(chuàng)建相冊(cè)Gallery
文章URL:http://muchs.cn/article6/pjjhig.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、軟件開發(fā)、關(guān)鍵詞優(yōu)化、響應(yīng)式網(wǎng)站、網(wǎng)站維護(hù)、企業(yè)網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)