0

在我的应用程序中,我有一个列表视图,它在其适配器中使用 ImageLoader 来加载带有 lsit 视图项的图像。

在活动的 oncreate 中,我为列表视图项获取一些 URL,如下所示:

private void fetchImages() {
        // TODO Auto-generated method stub

        //fetching the list
        mCustomProgressDialog = CustomProgressDialog.createDialog(Group_SharePictureMainActivity.this, "", "");
        mCustomProgressDialog.show();
        new Thread(){
            @Override
            public void run() {
                APIVariables apiVariables = new APIVariables();
                String getGroupImagesURL = apiVariables.getGroupImages(GroupsActivity.Group_ID);
                groupImages = ParseValues.getGroupImages(getGroupImagesURL);
                handlerFetchGroupImages.sendEmptyMessage(0);
            }
        }.start();

    }

这里我的问题是 - 我想实现一种情况,在这种情况下,当 Internet 连接不可用时,应该出现已经生成的列表视图(当 Internet 可用时)。

当网络连接不可用时,这是否可以保持列表视图的先前状态?

谢谢

4

3 回答 3

0

假设您在列表视图中显示来自服务器的图像。您可以缓存图像并在互联网连接关闭时加载它。

延迟加载图像。https://github.com/thest1/LazyList。它使用缓存。

imageLoader=new ImageLoader(activity.getApplicationContext());

在您的自定义列表适配器的 getview 中

 ImageView image=(ImageView)convertView.findViewById(R.id.imageview);
 imageLoader.DisplayImage("url", image);

在 LazyLoading 的 ImageLoader 类中。

public void DisplayImage(String url, ImageView imageView)
{
    System.out.println("Url................."+url);
    imageViews.put(imageView, url);
    Bitmap bitmap=memoryCache.get(url);//check if bitmap is there in cache. url is the key
    if(bitmap!=null)
        imageView.setImageBitmap(bitmap);//display if it is present.
    else
    {
        queuePhoto(url, imageView); //cache and display image.
        imageView.setImageResource(stub_id);//display a dummy image until image is dowloaded and displayed.
    }
}

还有一个开源的通用图像加载器。https://github.com/nostra13/Android-Universal-Image-Loader。异步显示图像。使用缓存。

缓存位图的其他方式。http://developer.android.com/training/displaying-bitmaps/cache-bitmap.html

于 2013-03-18T06:31:55.127 回答
0

您可以使用LRUCache 类来缓存下载到应用程序内存中的图像。在没有网络的情况下,您可以使用缓存的图像在 listView 中显示。如果有互联网,您可以获取新图像,如果不再需要旧图像,请在开始下载新图像之前清除缓存。

有关缓存图像的更多信息在此链接中进行了很好的描述。您可以使用该页面提供的示例应用程序。

另外,看看这个

于 2013-03-18T06:31:55.667 回答
0

您可以尝试以下方法:

当互联网连接可用时,下载图像并将其存储在内部存储器中。如果您想存储一些其他详细信息,您也可以将其存储在 SQLite 数据库中。如果网络不可用,则分别从数据库和内存中获取值和图像并加载到列表视图中。

于 2013-03-18T06:39:21.957 回答