Picasso入门教程(四) 如何处理空值(在ListView中)

这篇博客主要面向两类读者:1、遇到了IllegalArgumentException: Path must not be empty 这个报错信息。2、想要确定当在listview中加载不完整的image的时候,他们的app是否能够正常运行。我们将会在SimpleImageListAdapter 这个类中做我们的操作,代码如下:

public class SimpleImageListAdapter extends ArrayAdapter {  
    private Context context;
    private LayoutInflater inflater;

    private String[] imageUrls;

    public SimpleImageListAdapter(Context context, String[] imageUrls) {
        super(context, R.layout.listview_item_image, imageUrls);

        this.context = context;
        this.imageUrls = imageUrls;

        inflater = LayoutInflater.from(context);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // changed, see next code blog
    }
}

让我们来看一下getView()这个方法,首先,你传入的URL有可能是null,也有可能是空字符串。你可以使用TextUtils.isEmpty()来检验。

Option 1:让ImageView为空

如果你让ImageView为空,你需要使用cancelRequest()取消Picasso的请求。这会确保ImageView上没有正在进行的网络请求。这会在用户快速滑动ListView的时候或者ImageView重用的时候发生。这避免了在之前的ListView中加载不正确的图片。
再者,你可以重新设置ImageView。你不需要Picasso清空ImageView。你只需要调用imageView.setImageDrawable(null) 。然而,你需要确保这在你的UI中看起来不那么奇怪,因为你的ImageView仍然占有空间,即使它并没有显示图片。

Option 2:展示Placeholder

另一种情况是你可以使用placeholder这个方法而不是使用一个空ImageView。你可以根据你的情况来决定到底使用哪一种比较好。

如果你决定使用placeholder,你应该使用Picasso来完成。你可以使用常规的.load().into(imageView) ,Picasso将会加载placeholder。如果你确实使用了Picasso,你不需要在调用cancelRequest() 这个方法了,因为一旦一个加载图片的请求被响应,Picasso自动完成这些操作。
下面是示例代码:

@Override
public View getView(int position, View convertView, ViewGroup parent) {  
    if (null == convertView) {
        convertView = inflater.inflate(R.layout.listview_item_image, parent, false);
    }

    ImageView imageView = (ImageView) convertView;

    if (TextUtils.isEmpty(imageUrls[position])) {
        // option 1: cancel Picasso request and clear ImageView
        Picasso
                .with(context)
                .cancelRequest(imageView);

        imageView.setImageDrawable(null);

        // option 2: load placeholder with Picasso
        /*
        Picasso
                .with(context)
                .load(R.drawable.floorplan)
                .into(imageView);
        */
    }
    else {
        Picasso
                .with(context)
                .load(imageUrls[position])
                .fit() // will explain later
                .into(imageView);
    }

    return convertView;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值