首先将文本加载到自定义Listview,然后逐个加载图像

时间:2014-04-08 08:29:19

标签: android android-listview

我正在使用自定义Listview和Image适配器以及Universal Image Loader将图像URL加载到异步任务的列表视图中。

问题是网址是Dropbox链接,他们需要很长时间才能将共享网址检索到图片。如果我有30个图像循环并获取URL链接,则需要一分钟才能获得实际的URL。

我希望能够修改我的代码,以便:

  • 返回单个URL后,会将其传递给Image Adapter并添加到ListView。

因此,iamges将逐个加载,用户会看到图像被加载到列表视图中,并且不需要等待很长时间没有任何事情发生。

以下是目前的doInBackground

 @Override
    protected Boolean doInBackground(DbxFileSystem... params) {
        //Opens thumbnails for each image contained in the dropbox folder
        try {
            DbxFileSystem fileSystem = params[0];


            for (DbxFileInfo fileInfo: fileSystem.listFolder(currentPath)) {
                String filename = fileInfo.path.getName();

                DbxFile file;
                try{
                    if(!fileInfo.isFolder)
                    {

                        paths.add(fileInfo.path); 
                        //takes a long time
                        urls.add(fileSystem.fetchShareLink(fileInfo.path,false).toString());
                        //can we call the imageadapter here somehow to update with this image?
                    }
                    else
                    {
                        //must be a folder  so add folder icon
                        urls.add("drawable://" + R.drawable.dbfolder);
                        paths.add(fileInfo.path);
                    }

执行后只需:

ImageAdapter adapter = new ImageAdapter(this, urls, paths);
 lstView.setAdapter(adapter);

我是否需要另外的Async任务或我应该以什么方式执行此操作? 那么一个Async需要恢复URL和另一个异步任务来加载图像? 你可以从另一个调用一个Aync任务,如果是这样,应该怎么做?

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

您可以先从服务器获取所有网址,或在图像之前获取任何其他数据。

我建议你使用Volley库。在列表项膨胀上,异步下载图像。 Volley framework

YourApp.getInstance().getImageLoader()
                      .get(list.get(position).getImagePath(), ImageLoader.getImageListener(holder.yourImageView, R.drawable.loading, R.drawable.yourDefaultImage));

您需要使用静态变量RequestQueue和ImageLoader扩展您的应用程序类。

您肯定可以在网上找到一些教程。