编程语言
首页 > 编程语言> > java-BaseAdapter和Picasso问题

java-BaseAdapter和Picasso问题

作者:互联网

我从带有Picasso的服务器加载ListView中的图像时遇到问题.

我有一个用于填充ListView的BaseAdapter.在此ListView中,有些项目有图像,有些则没有.

在这种方法中:

public View getView(final int position, View convertView, ViewGroup parent) {

我做:

 ...

//context = Activity context;
//context1 = Context context1;
context1 = context.getApplicationContext();

 if (!photo[position].equals("")) {

    String stringurl = "http://www.blablabla.it/img/"+photo[position]+".jpg";

    Picasso.with(context1)
           .load(stringurl)
           .placeholder(R.drawable.white)
           .into(holder.imageD);
        }
 else {

    holder.imageD.setImageBitmap(null);
 }

这段代码有效,但是我经常看到图像位于与其所属位置不同的位置!

如您所料,这对用户来说非常烦人..谢谢大家

解决方法:

您曾经遇到过此问题,因为ListView回收项目视图Picasso调用是异步的…它如何显示?

>您开始使用毕加索加载
>视图被重用(convertView!= null)
>您正在设置holder.imageD.setImageBitmap(null);
>从点1开始异步.

这就是为什么您加载错误的图像的原因…

为了避免这种行为,您需要通知Picasso加载程序取消先前的请求.
因此,只需将图像位图设置为null,您就必须通过Picasso库进行设置(在其他声明中使用):

Picasso.with(CONTEXT1).load(空).placeholder(R.drawable.white).into(holder.imageD);

编辑:以下@Budius评论:更好的解决方案将被取消并设置为:

{
  Picasso.with(context1).cancelRequest(holder.imageD);
  //holder.imageD.setImageBitmap(null); //or
  holder.imageD.setImageResource(R.drawable.white); //depends on your needs
}

这应该是更有效的方法,因为它应该在每个getView调用上创建更少的内部对象.

标签:android,java,listview,picasso,baseadapter
来源: https://codeday.me/bug/20191014/1912077.html