成都网站建设设计

将想法与焦点和您一起共享

AndroidStudio中怎么用ListFragments创建相册Gallery

这篇文章主要介绍Android Studio中怎么用List Fragments创建相册Gallery,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

10年积累的成都网站建设、网站建设经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有巩义免费网站建设让你可以放心的选择与我们合作。

AsyncTaskLoaders 以及 Fragments

加载整个图片库到List是一个运算量比较密集,强度很高任务。因此,我们希望利用 Android 提供的AsyncTaskLoader 通过异步加载解决这个问题。在这里,我已经写好了一个自定义AsyncTaskLoader工具类用加载图库中图片的。我把它命名为:PhotoGalleryImageProvider,可以在源码中找到。

Fragments 提供了一种特殊的接口给异步任务的 Loader 以便于自动触发异步加载任务。我们的图库列表在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); }

请注意***的这一行:

getLoaderManager().initLoader(0, null, this);

这一行的作用就是自动启用 AsyncLoader。AsyncLoader的相关代码放在这个Class文件的后面。

/**  * Loader Handlers for loading the photos in the background.  */ @Override public Loader 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()); }

每次后台任务成功获取到图库中的图片时,则会回调下面这个函数:

@Override public void onLoadFinished(Loader 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 存储数据)的数组包含了指向所有图库中图片的缩略图以及全尺寸图片的URL。一旦获取这些数据,Adapter必定会通过 “notifyDataSetChanged” 回调来通知出去,从而刷新当前的图片列表。

通过游标(cursor)来获取缩略图

之前我提到过,我已经提供了一个工具类可以用游标方便的去获取图库中图片的缩略图,这个工具类叫做“PhotoGalleryImageProvider”。这个类的主要用法如下:

/**      * 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 去后台获取图片是比较简单的一种用法。另一种高级的用法则是使用 CursorLoader  来操作Cursor。CursorLoader 内建了一个 AsyncTaskLoader  可以用来自动处理后台的加载进程。由于需要同时渲染获取到图片的缩略图和完整尺寸的图片,所以尽管使用带有CursorLoader的AsyncTask 也可以得到同样的结果,但我还是选择了写一个自定义的Task Loader。

以上是“Android Studio中怎么用List Fragments创建相册Gallery”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注创新互联行业资讯频道!


分享名称:AndroidStudio中怎么用ListFragments创建相册Gallery
分享网址:http://chengdu.cdxwcx.cn/article/pjjhig.html