有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Picasso视图无法在DataAdapter内转换为上下文

我创建了我的应用程序,它正在连接到服务器上的JSON文件,以获取用户信息,然后将其设置到卡片行。这一切都很好,但我无法让毕加索使用它,除非我把它放在我的public ViewHolder(视图)方法中,但我无法访问阵列。有办法解决这个问题吗?我发现了错误

Error:(55, 22) error: incompatible types: DataAdapter.ViewHolder cannot be converted to Context

代码发布在下面。谢谢

package com.example.curtisboylan.myapplication;

/**
 * Created by curtisboylan on 02/02/2017.
 */
import 安卓.content.Intent;
import 安卓.support.v7.widget.RecyclerView;
import 安卓.view.LayoutInflater;
import 安卓.view.View;
import 安卓.view.ViewGroup;
import 安卓.widget.ImageView;
import 安卓.widget.TextView;
import 安卓.widget.Toast;
import com.squareup.picasso.Picasso;

import java.util.ArrayList;

public class DataAdapter extends RecyclerView.Adapter<DataAdapter.ViewHolder> {
    private ArrayList<String> username;
    private ArrayList<String> userid;
    private ArrayList<String> location;
    private ArrayList<String> reviewscore;
    private ArrayList<String> price;
    private ArrayList<String> url;


    public DataAdapter(ArrayList<String> username, ArrayList<String> userid, ArrayList<String> location, ArrayList<String> reviewscore, ArrayList<String> price, ArrayList<String> url) {
        this.username = username;
        this.userid = userid;
        this.location = location;
        this.reviewscore = reviewscore;
        this.price = price;
        this.url = url;

    }

    @Override
    public DataAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.card_row, viewGroup, false);

        return new ViewHolder(view);

    }

    @Override
    public void onBindViewHolder(DataAdapter.ViewHolder viewHolder, int i) {
        final String item = userid.get(i);
        final String usernamepass = username.get(i);
        viewHolder.usernametext.setText(username.get(i));
        viewHolder.reviewscoretext.setText(reviewscore.get(i));
        viewHolder.pricetext.setText("€" + price.get(i) +"/hr");
        viewHolder.locationtext.setText(location.get(i));
      //"https://cms-assets.tutsplus.com/uploads/users/21/posts/19431/featured_image/CodeFeature.jpg";

        Picasso.with(viewHolder)
                .load(url.get(i))
                .into(viewHolder.profileimg);






        viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(view.getContext(), "User ID: " + item, Toast.LENGTH_SHORT).show();

                Intent intent=new Intent(view.getContext(),TechnicianProfile.class);
                intent.putExtra("username", usernamepass);
                intent.putExtra("userid", item);
                view.getContext().startActivity(intent);
            }
        });
    }

    @Override
    public int getItemCount() {
        return username.size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder{
        private TextView usernametext;
        private TextView pricetext;
        private TextView locationtext;
        private TextView reviewscoretext;
        private ImageView profileimg;

               public ViewHolder(View view) {
                       super(view);

                   usernametext = (TextView)view.findViewById(R.id.textView4);
                   pricetext = (TextView)view.findViewById(R.id.price);
                   locationtext = (TextView)view.findViewById(R.id.location);
                   reviewscoretext = (TextView)view.findViewById(R.id.reviewscore);
                   profileimg = (ImageView)view.findViewById(R.id.userpic);

                    }
            }

}

共 (1) 个答案

  1. # 1 楼答案

    你需要给^{}^{}一个。换成

    Picasso.with(viewHolder.itemView.getContext())
            ...
    

    但这很容易出错,为了避免泄漏,最好给出一个application context