Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android在ListView中加载图像_Java_Android_Image_Listview - Fatal编程技术网

Java Android在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

我正在将Parse.com中的图像加载到我的listview中,一切正常,但问题是,当我在listview中滚动时,图像一直在重新加载。我正在将图像缓存在内存中,但每次加载图像前都会闪烁,这很烦人

我正在使用异步任务加载图像,代码如下:

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);