onBindViewHolder弄乱了图片

时间:2018-10-15 07:54:42

标签: android android-recyclerview

我有一个人卡的回收者清单。每张卡必须具有1张图片和名称(图片1,从json加载)。但对于大多数卡-json中没有相应的图片。当我搜索名称时,相同的照片会分配不同的名称(图2)。 请帮忙,如何解决?

public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
    CriticResults criticResults = results.get(position);
    holder.tvTitle.setText( criticResults.getDisplayName() );
    try {
         Picasso.get().load( criticResults.getMultimedia().getResource().getSrc() ).into( holder.ivPhoto );
    }
   catch (Exception o){}
}

pic 2 pic 1

3 个答案:

答案 0 :(得分:0)

尝试使用if-elseholder.getAdapterPosition()

public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
    CriticResults criticResults = results.get(holder.getAdapterPosition());
    holder.tvTitle.setText( criticResults.getDisplayName() );

    if(criticResults.getMultimedia().getResource().getSrc() != null) {
        Picasso.get().load(criticResults.getMultimedia().getResource().getSrc()).into(holder.ivPhoto);
    } else {
    Picasso.get().load(/*Your default pic*/).into(holder.ivPhoto);
    }
}

答案 1 :(得分:0)

您尚未向我们展示您的视图持有者对象,但我想您的问题是,当没有要显示的图片时,您没有覆盖ImageView内容,因此显示了最后加载的图片。

您应该执行以下操作:

public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
    CriticResults criticResults = results.get(position);
    holder.tvTitle.setText( criticResults.getDisplayName());

    if (criticResults.getMultimedia().getResource().getSrc() != null) {
        Picasso.get().load(criticResults.getMultimedia().getResource().getSrc())
        .error(R.drawable.user_placeholder_error)
        .into(holder.ivPhoto)
    } else {
        holder.ivPhoto.setDrawable(R.drawable.user_placeholder_error);
    }
}

有可能仅与error()上的Picasso调用一起使用。

答案 2 :(得分:0)

谢谢您的帮助!它已经起作用了(如果不起作用,则会出现错误“ null refference”):

public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
    CriticResults criticResults = critics.get(position);
    holder.tvTitle.setText( criticResults.getDisplayName() );
    try {
         Picasso.get().load( criticResults.getMultimedia().getResource().getSrc() ).into( holder.ivPhoto );
    }
   catch (Exception o){
        Picasso.get().load(R.drawable.noimage).into(holder.ivPhoto);
    }

}