android 中的毕加索图书馆无法在 RecyclerView 中工作

Picasso Library Not Working In RecyclerView in android

所以当我设置 Picasso 方法来转换我的图像时,我在我的适配器中遇到了这个问题 url 无论我如何做,它都不允许我传递上下文。我已经尝试过这个和 class 名称。这似乎都不起作用。不确定发生什么或为什么会发生这种情况。这是我遇到问题的适配器 class。

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ContentViewHolder> {



public  content[] mDataset;

public MyAdapter(content[] data) {
    mDataset = data;

}


@Override
public ContentViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

    View view = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.test, parent, false);
    ContentViewHolder viewHolder = new ContentViewHolder(view);
    return viewHolder;
}

@Override
public void onBindViewHolder(ContentViewHolder holder, int position) {
    holder.bindContent(mDataset[position]);
}

@Override
public int getItemCount() {
    return mDataset.length;
}

public class ContentViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

    public TextView mUrl;
    public TextView mTitle;
    public TextView mDate;
    public TextView mAuthor;
    public ImageView mThumbnail;

    public ContentViewHolder(View itemView) {
        super(itemView);
        mUrl= (TextView) itemView.findViewById(R.id.url);
        mTitle = (TextView) itemView.findViewById(R.id.title);
        mDate = (TextView) itemView.findViewById(R.id.date);
        mAuthor = (TextView) itemView.findViewById(R.id.author);
        mThumbnail =(ImageView)itemView.findViewById(R.id.thumbnail);

    }

    public void bindContent(content bloginfo) {
        mUrl.setText(bloginfo.getUrl());
        mTitle.setText(bloginfo.getTitle());
        mDate.setText(bloginfo.getDate());
        mAuthor.setText(bloginfo.getAuthor());


        Picasso.with(context).load(bloginfo.getThumbnail()).into(mThumbnail);

    }

    @Override
    public void onClick(View view) {

    }
}
}

这个

 Picasso.with(MyAdapter.this)

应该是

 Picasso.with(context)

使用Activity上下文。这可以从 activity.

传递给适配器 class 的构造函数

http://developer.android.com/reference/android/content/Context.html

http://square.github.io/picasso/

样品可在 github

https://github.com/square/picasso/blob/master/picasso-sample/src/main/java/com/example/picasso/PicassoSampleAdapter.java

在您的适配器中,您可以:

private Activity activityContext;

然后在适配器构造函数中:

public MyAdapter(Activity context, content[] data) {
    mDataset = data;
    activityContext = context;
}

最后调用:

Picasso.with(activityContext).load(bloginfo.getThumbnail()).into(mThumbnail);

如果您在 Activity 中创建适配器,则需要使用以下方法创建它: new myAdapter(this, YOURDATA),如果在Fragment中创建,需要使用new myAdapter(getActivity(), YOURDATA).

Picasso.with(mThumbnail.getContext()).load(bloginfo.getThumbnail()).into(mThumbnail);

好的,我让它工作了,下面是工作适配器代码。谢谢大家的帮助。

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ContentViewHolder> {

public  content[] mDataset;
private Activity activityContext;

public MyAdapter(Activity context,content[] data) {
    mDataset = data;
    activityContext = context;
}

@Override
public ContentViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

    View view = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.test, parent, false);
    ContentViewHolder viewHolder = new ContentViewHolder(view);
    return viewHolder;
}

@Override
public void onBindViewHolder(ContentViewHolder holder, int position) {
    holder.bindContent(mDataset[position]);
}

@Override
public int getItemCount() {
    return mDataset.length;
}

public class ContentViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

    public TextView mUrl;
    public TextView mTitle;
    public TextView mDate;
    public TextView mAuthor;
    public ImageView mThumbnail;

    public ContentViewHolder(View itemView) {
        super(itemView);
        mUrl= (TextView) itemView.findViewById(R.id.url);
        mTitle = (TextView) itemView.findViewById(R.id.title);
        mDate = (TextView) itemView.findViewById(R.id.date);
        mAuthor = (TextView) itemView.findViewById(R.id.author);
        mThumbnail =(ImageView)itemView.findViewById(R.id.thumbnail);

    }

    public void bindContent(content bloginfo) {
        mUrl.setText(bloginfo.getUrl());
        mTitle.setText(bloginfo.getTitle());
        mDate.setText(bloginfo.getDate());
        mAuthor.setText(bloginfo.getAuthor());


        Picasso.with(activityContext).load(bloginfo.getThumbnail()).into(mThumbnail);

    }

    @Override
    public void onClick(View view) {

    }
  }
}