互联网不可用时加载列表视图

时间:2013-03-18 06:19:50

标签: android listview

在我的应用程序中,我有一个列表视图,在其适配器中使用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();

    }

我的问题在于 - 我想实现一种情况,当互联网连接不可用时,应该会出现已经生成的列表视图(当互联网可用时)。

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

由于

3 个答案:

答案 0 :(得分:0)

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

延迟加载图片。 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

答案 1 :(得分:0)

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

有关缓存图像的更多信息,请参阅此link。 您可以使用该页面提供的示例应用程序。

另外,请查看this

答案 2 :(得分:0)

您可以尝试以下方法:

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