Picasso不适用于android中的Recycler View

时间:2015-02-06 11:31:49

标签: android picasso android-recyclerview

我开发了一个简单的RSS阅读器,我希望在回收者视图中显示每个帖子的标题和图像。

我可以使用Picasso从ArrayList加载图像:

public void onBindViewHolder(ViewHolder viewHolder, int i) {
    RssItem item = rssItems.get(i);
    Picasso.with(F.context).load(item.imageLink).into(viewHolder.postImage);
    viewHolder.postTitle.setText(item.title);
    viewHolder.postAuthor.setText(item.postWriter);
    viewHolder.postDate.setText(item.pubDate);
}

但它不起作用! 我使用单个网址测试Picasso并且它可以正常工作,但是当在图像列表中设置图像链接时,它不起作用。

6 个答案:

答案 0 :(得分:7)

你见过this article吗?它是关于RecyclerView的。作者在适配器中使用Picasso。

@Override
public void onBindViewHolder(FeedListRowHolder feedListRowHolder, int i) {
    FeedItem feedItem = feedItemList.get(i);

    Picasso.with(mContext).load(feedItem.getThumbnail())
            .error(R.drawable.placeholder)
            .placeholder(R.drawable.placeholder)
            .into(feedListRowHolder.thumbnail);

    feedListRowHolder.title.setText(Html.fromHtml(feedItem.getTitle()));
}

答案 1 :(得分:2)

当我想在扩展的RecyclerView.Adapter和RecyclerView.ViewHolder中使用API​​从其URL加载图像时,我遇到了同样的问题。
首先,您必须检查URL可能不为空或为空,然后使用Picasso加载它。

@Override
public void onBindViewHolder(ViewHolder viewHolder, int i) {
      RssItem item = rssItems.get(i);
      if(item.imageLink!=null && !item.imageLink.isEmpty()){
          Picasso.with(F.context)
              .load(item.imageLink)
              .placeholder(R.drawable.default_placeholder)
              .error(R.drawable.error_placeholder)
              // To fit image into imageView
              .fit()
              // To prevent fade animation
              .noFade()
              .into(viewHolder.postImage);
     }else{  
          viewHolder.postImage.setImageDrawable(ContextCompat.getDrawable(F.context,R.drawable.default_placeholder));
     }
     viewHolder.postTitle.setText(item.title);
     viewHolder.postAuthor.setText(item.postWriter);
     viewHolder.postDate.setText(item.pubDate);
}

最后你必须知道 viewHolder.postImage 以及它的结果如何,它可能是空的,或者没有正确查看id。 我希望这会对你有所帮助。

答案 2 :(得分:2)

仅使用一个简单的代码:

 @Override
    public void onBindViewHolder(ShivaViewholder holder, int position) {
    Picasso.get().load("http://i.imgur.com/DvpvklR.png").into(holder.imageView2);
    }

但是,如果您还希望在图标中显示图像或需要位置,那么我们将在此代码中使用一些其他代码。

答案 3 :(得分:1)

我被这件事情困住了一段时间但是在网上阅读资源后对它进行了分类。 这是你需要做的,对我有用。 我将解决您在ViewHolder类中声明的imageview中加载图像的问题。

public void onBindViewHolder(ViewHolder viewHolder, int i) {
    Context context = viewHolder.postImage.getContext(); //<----- Add this line
    RssItem item = rssItems.get(i);

    //change context here
    Picasso.with(context).load(item.imageLink).into(viewHolder.postImage);

    viewHolder.postTitle.setText(item.title);
    viewHolder.postAuthor.setText(item.postWriter);
    viewHolder.postDate.setText(item.pubDate);
}

这对我有用,我希望它对你也有用。祝你好运。

答案 4 :(得分:1)

请注意,您需要在Android清单上进行此设置,以使Picasso通过url加载任何图像。 更新为答案:

让Picasso从网址中加载图片,例如https://picsum.photos/900/900?image=0。它需要具有正确的权限,您需要在android清单文件中进行设置。...因此,在您的java中,您将具有:

Picasso.get().load("http://i.imgur.com/DvpvklR.png").into(imageView);

但是这可能不会加载任何图像,并且似乎毕加索无法正常工作..所以您必须更新AndroidManifest.xml,并在清单标记的下面添加以下内容:

<uses-permission android:name="android.permission.INTERNET" />

答案 5 :(得分:0)

如果您要从Internet加载图像-请确保已在AndroidManifest.xml中添加了对INTERNET的权限:

<uses-permission android:name="android.permission.INTERNET"/>