Java Android在ListView中加载图像
我正在将Parse.com中的图像加载到我的listview中,一切正常,但问题是,当我在listview中滚动时,图像一直在重新加载。我正在将图像缓存在内存中,但每次加载图像前都会闪烁,这很烦人 我正在使用异步任务加载图像,代码如下:Java Android在ListView中加载图像,java,android,image,listview,Java,Android,Image,Listview,我正在将Parse.com中的图像加载到我的listview中,一切正常,但问题是,当我在listview中滚动时,图像一直在重新加载。我正在将图像缓存在内存中,但每次加载图像前都会闪烁,这很烦人 我正在使用异步任务加载图像,代码如下: private class loadContent extends AsyncTask<Void, Void, Void>{ @Override protected Void doInBackground(Void... param
private class loadContent extends AsyncTask<Void, Void, Void>{
@Override
protected Void doInBackground(Void... params) {
try {
query = new ParseQuery<ParseObject>("Images");
query.orderByDescending("createdAt");
query.setLimit(limit);
ob = query.find();
for(ParseObject num : ob){
ParseFile img = (ParseFile)num.get("img");
PostRow test1 = new PostRow(img.getUrl().toString(), (String) num.get("username"));
postList.add(test1);
}
//loadDataFromAdapter();
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
adapter.notifyDataSetChanged();
}
}
私有类loadContent扩展异步任务{
@凌驾
受保护的Void doInBackground(Void…参数){
试一试{
查询=新的解析查询(“图像”);
query.orderByDescending(“createdAt”);
query.setLimit(limit);
ob=query.find();
for(ParseObject num:ob){
ParseFile img=(ParseFile)num.get(“img”);
PostRow test1=新的PostRow(img.getUrl().toString(),(String)num.get(“用户名”);
add(test1);
}
//loadDataFromAdapter();
}捕获(解析异常){
e、 printStackTrace();
}
返回null;
}
@凌驾
受保护的void onPostExecute(void避免){
super.onPostExecute(避免);
adapter.notifyDataSetChanged();
}
}
例如,我可以做些什么来保持listview中一次加载10个图像?您应该研究如何使用该库。从他们的网站:
- 它在适配器中处理ImageView回收和下载取消
- 使用最少内存的复杂图像转换
- 自动内存和磁盘缓存
希望有帮助 对于任何使用Universal Image Loader的人来说,问题在于我的配置,我的ram太少,无法缓存。现在我改变了这一点,一切都很完美
.memoryCache(new LruMemoryCache(50 * 1024 * 1024))
.memoryCacheSize(50 * 1024 * 1024)
正如op所建议的,使用将是更明智的方法 但是,为了防止这种“恼人的闪烁”,仍然需要使用可绘制的占位符
如何下载/初始化列表?在onCreate内部?列表在onCreate方法中初始化,图像在上面代码中的lloadContent类中下载。一切都很好,除了在我滚动时listview一直在重新加载我的项目。谢谢你的回答,但我已经使用了另一个库,Universal Image Loader。然而,几分钟前,我解决了这个问题。问题是我为缓存留下了太小的内存,我现在已经改变了,所以一切都很好。很高兴听到你能够解决你的问题
ParseFile img = (ParseFile)num.get("img");
String urlImage = img.getUrl().toString();
Picasso.with(context).load(urlImage).fit().centerCrop().placeholder(R.drawable.white_placeholder).into(imageview);