Android Recyclerview,使用 Glide 从 URls 加载图像

Android Recyclerview, loading images from URls using Glide

我能够从 firebase 成功检索文本数据,但我在对图像执行相同操作时遇到了一些困难。我正在使用回收器视图,下面是我的回收器适配器:

public class RecyclerviewAdapter extends RecyclerView.Adapter<RecyclerviewAdapter.MyHolder>{

    List<Listdata> listdata;

    public RecyclerviewAdapter(List<Listdata> listdata) {
        this.listdata = listdata;
    }

    @Override
    public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.myview,parent,false);

        MyHolder myHolder = new MyHolder(view);
        return myHolder;
    }


    public void onBindViewHolder(MyHolder holder, int position) {
        Listdata data = listdata.get(position);
        holder.vname.setText(data.getName());
        holder.vemail.setText(data.getEmail());
        holder.vaddress.setText(data.getAddress());

    }

    @Override
    public int getItemCount() {
        return listdata.size();
    }
    class MyHolder extends RecyclerView.ViewHolder{
        TextView vname , vaddress,vemail;
        ImageView thumbnail;


        public MyHolder(View itemView) {
            super(itemView);



            vname = (TextView) itemView.findViewById(R.id.vname);
            thumbnail = (ImageView) itemView.findViewById(thumbnail);
            vemail = (TextView) itemView.findViewById(R.id.vemail);
            vaddress = (TextView) itemView.findViewById(R.id.vaddress);

        }
    }


}

这里是 activity 初始化流程的代码:

myRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                list = new ArrayList<>();
                // StringBuffer stringbuffer = new StringBuffer();
                for(DataSnapshot dataSnapshot1 :dataSnapshot.getChildren()){
                    Userdetails userdetails = dataSnapshot1.getValue(Userdetails.class);
                    Listdata listdata = new Listdata();
                    String name=userdetails.getName();
                    String email=userdetails.getEmail();
                    String address=userdetails.getAddress();
                    listdata.setName(name);
                    listdata.setEmail(email);
                    listdata.setAddress(address);
                    list.add(listdata);
                    // Toast.makeText(MainActivity.this,""+name,Toast.LENGTH_LONG).show();

                }

                RecyclerviewAdapter recycler = new RecyclerviewAdapter(list);
                RecyclerView.LayoutManager layoutmanager = new LinearLayoutManager(InvestmentDrawer.this);
                recyclerview.setLayoutManager(layoutmanager);
                recyclerview.setItemAnimator( new DefaultItemAnimator());
                recyclerview.setAdapter(recycler);

            }

            @Override
            public void onCancelled(DatabaseError error) {
                // Failed to read value
                //  Log.w(TAG, "Failed to read value.", error.toException());
            }
        });
Glide.with(this)
             .load(imageData)
             .diskCacheStrategy(DiskCacheStrategy.ALL)
             .into(ivImgGlide);
        }

我想使用在数据库中输入的 url 来动态加载图像。使用 glidepicasso。下面是列表数据class

public class Listdata {

    public String name;
    public String address;
    public String email;

    public String imageurl;

    public String getImageUrl() {
        return imageurl;
    }

    public void SetImageUrl(String imageurl) {
        this.imageurl = imageurl;
    }
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

您可以在 onBindViewHolder 中使用 Picasso 或滑动

public class RecyclerviewAdapter extends RecyclerView.Adapter<RecyclerviewAdapter.MyHolder>{

List<Listdata> listdata;
Context context;

public RecyclerviewAdapter(List<Listdata> listdata,Context context) {
    this.listdata = listdata;
    this.context = context;
}

@Override
public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.myview,parent,false);

    MyHolder myHolder = new MyHolder(view);
    return myHolder;
}


public void onBindViewHolder(MyHolder holder, int position) {
    Listdata data = listdata.get(position);
    holder.vname.setText(data.getName());
    holder.vemail.setText(data.getEmail());

    holder.vaddress.setText(data.getAddress());

      Glide.with(context)
         .load(data.getImageUrl())
         .diskCacheStrategy(DiskCacheStrategy.ALL)
         .into(holder.thumbnail);

     //with Picasso
      Picasso.with(context)
      .load(data.getImageUrl())
      .into(holder.thumbnail);

      // you need to define a method getImageUrl() to get the image url in Listdata
}

@Override
public int getItemCount() {
    return listdata.size();
}
class MyHolder extends RecyclerView.ViewHolder{
    TextView vname , vaddress,vemail;
    ImageView thumbnail;


    public MyHolder(View itemView) {
        super(itemView);



        vname = (TextView) itemView.findViewById(R.id.vname);
        thumbnail = (ImageView) itemView.findViewById(thumbnail);
        vemail = (TextView) itemView.findViewById(R.id.vemail);
        vaddress = (TextView) itemView.findViewById(R.id.vaddress);

    }
}



}

请记住,您需要将上下文从 parent activity 传递到适配器

在您的 onDataChanged 中,您需要使用 SetImageUrl()

设置图像 url
@Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            list = new ArrayList<>();
            // StringBuffer stringbuffer = new StringBuffer();
            for(DataSnapshot dataSnapshot1 :dataSnapshot.getChildren()){
                Userdetails userdetails = dataSnapshot1.getValue(Userdetails.class);
                Listdata listdata = new Listdata();
                String name=userdetails.getName();
                String email=userdetails.getEmail();
                String address=userdetails.getAddress();
                String imageUrl = userdetails.getImageUrl();
                listdata.setName(name);
                listdata.setEmail(email);
                listdata.setAddress(address);
                listdata.SetImageUrl(imageUrl);
                list.add(listdata);
                // Toast.makeText(MainActivity.this,""+name,Toast.LENGTH_LONG).show();

            }

            RecyclerviewAdapter recycler = new RecyclerviewAdapter(list,getApplicationContext());
            RecyclerView.LayoutManager layoutmanager = new LinearLayoutManager(InvestmentDrawer.this);
            recyclerview.setLayoutManager(layoutmanager);
            recyclerview.setItemAnimator( new DefaultItemAnimator());
            recyclerview.setAdapter(recycler);

        }