0

I want to show image in Recyclerview( mode list) from drawable, but that's image can't show, how can I fix it?

this is my ListBookAdapter.java

public class ListBookAdapter extends RecyclerView.Adapter<ListBookAdapter.ListViewHolder> {
private Context context;
private ArrayList<Book> listbook;
private OnItemSelected onItemSelected;

public ListBookAdapter(Context context, ArrayList<Book> book, OnItemSelected onItemSelected) {
    this.context = context;
    this.listbook = book;
    this.onItemSelected = onItemSelected;
}

@NonNull
@Override
public ListViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {
    View view = LayoutInflater.from(context).inflate(R.layout.item_row_book, viewGroup,false);
    return new ListViewHolder(view);
}

public class ListViewHolder extends RecyclerView.ViewHolder {
    ImageView imgPhoto;
    TextView tvName, tvDetail;

    ListViewHolder(View itemView){
        super(itemView);
        imgPhoto = itemView.findViewById(R.id.img_item_photo);
        tvName = itemView.findViewById(R.id.tv_item_name);
        tvDetail = itemView.findViewById(R.id.tv_item_title);

    }
}

@Override
public void onBindViewHolder(@NonNull ListViewHolder holder, int position) {
    final Book book = listbook.get(position);

   System.out.println("Data Photo : " + book.getPhoto());
   int drawableResourceId = context.getResources().getIdentifier(book.getPhoto(), "drawable", holder.itemView.getContext().getPackageName());

    Glide.with(holder.itemView.getContext())
            .load(drawableResourceId)
            .apply(new RequestOptions().override(55,55))
            .into(holder.imgPhoto);

    //holder.imgPhoto.setImageResource(Integer.valueOf(book.getPhoto()));
    holder.tvName.setText(book.getName());
    holder.tvDetail.setText(book.getTitle());

    holder.itemView.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v) {
            onItemSelected.onSelected(book);
        }
    });
}

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

public interface OnItemSelected {
    void onSelected(Book book);
   }

}

This is My Problem

My problem is, My image from drawable can't show in my Recylerview (mode list) and my detail page

2019-09-26 16:06:05.261 2397-2397/? E/PhoneState: iconId is 0android.widget.ImageView{e32f384 G.ED..... ......ID 0,0-10,28 #7f0900e3 app:id/data_inout} 2019-09-26 16:06:05.261 2397-2397/? E/PhoneState: iconId is 0android.widget.ImageView{badc3f0 G.ED..... ......I. 0,0-0,0 #7f0900e3 app:id/data_inout} 2019-09-26 16:06:07.342 2397-2397/? E/PhoneState: iconId is 0android.widget.ImageView{e32f384 G.ED..... ......ID 0,0-10,28 #7f0900e3 app:id/data_inout} 2019-09-26 16:06:07.343 2397-2397/? E/PhoneState: iconId is 0android.widget.ImageView{badc3f0 G.ED..... ......I. 0,0-0,0 #7f0900e3 app:id/data_inout} 2019-09-26 16:06:13.235 2397-2397/? E/PhoneState: iconId is 0android.widget.ImageView{e32f384 G.ED..... ......ID 0,0-10,28 #7f0900e3 app:id/data_inout} 2019-09-26 16:06:13.235 2397-2397/? E/PhoneState: iconId is 0android.widget.ImageView{badc3f0 G.ED..... ......I. 0,0-0,0 #7f0900e3 app:id/data_inout}

Martin Zeitler
  • 1
  • 19
  • 155
  • 216
  • checkout this https://stackoverflow.com/questions/42868036/android-how-to-load-image-by-name-using-glide – Ankit Sep 26 '19 at 09:37

1 Answers1

0

Try with this code on your onBindViewHolder method

@Override
public void onBindViewHolder(@NonNull ListViewHolder holder, int position) {
    final Book book = listbook.get(position);

    System.out.println("Data Photo : " + book.getPhoto());
    int drawableResourceId = this.getResources().getIdentifier(book.getPhoto(), "drawable", holder.itemView.getContext().getPackageName()));
    Glide.with(holder.itemView.getContext())
            .load(drawableResourceId)
            .apply(new RequestOptions().override(55,55))
            .into(holder.imgPhoto);

    holder.tvName.setText(book.getName());
    holder.tvDetail.setText(book.getTitle());

    holder.itemView.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v) {
            onItemSelected.onSelected(book);
        }
    });
}
shareque
  • 13
  • 8
  • is your **book.getPhoto()** present in drawable folder?? – shareque Sep 26 '19 at 10:47
  • Yes sure, done my image present in drawable folder, look my code again, I have change my code, like you show –  Sep 26 '19 at 10:49
  • use ```int drawableResourceId = this.getResources().getIdentifier(book.getPhoto(), "drawable", holder.itemView.getContext().getPackageName())); Glide.with(holder.itemView.getContext()) .load(drawableResourceId) .into(holder.imgPhoto);``` this code – shareque Sep 26 '19 at 10:55
  • use **context.** in place of **this.** – shareque Sep 26 '19 at 11:07