在我的应用程序中,我有一个列表视图,在其适配器中使用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();
}
我的问题在于 - 我想实现一种情况,当互联网连接不可用时,应该会出现已经生成的列表视图(当互联网可用时)。
当网络连接不可用时,是否可以维护列表视图的先前状态?
由于
答案 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数据库中。如果网络不可用,则分别从数据库和内存中获取值和图像,并在列表视图中加载。