Glide не загружает изображения, когда есть два типа представления в RecyclerView.Adapter onBindViewHolder

Я пытаюсь заполнить RecyclerView.Adapter двумя типами представлений с помощью getItemViewType, но я не могу получить изображения из URL с помощью Glide. Если только я положу груз, если вы покажете мне Glide images в пункте 2. Помогите мне исправить это

Существует два типа представлений, каждое из которых имеет изображение и разные данные для других, в зависимости от типа представления назначается другое представление карты.

public class ItemAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private static final String TAG = LogUtils.makeLogTag(ItemAdapter.class);

private List<Object> items;
private final int TYPE1 = 0, TYPE2 = 1;

public ItemAdapter(List<Object> items) {
    this.items=items;
}

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

@Override
public int getItemViewType(int position) {
    if (items.get(position) instanceof ItemType1) {
        return TYPE1;
    } else if (items.get(position) instanceof ItemType2) {
        return TYPE2;
    }
    return -1;
}

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

    RecyclerView.ViewHolder viewHolder;
    LayoutInflater inflater = LayoutInflater.from(parent.getContext());

    switch (viewType) {
        case TYPE1:
            View v1 = inflater.inflate(R.layout.card_item_type_1, parent, false);
            viewHolder = new ItemType1ViewHolder(v1);
            break;
        case TYPE2:
            View v2 = inflater.inflate(R.layout.card_item_type_2, parent, false);
            viewHolder = new ItemType2ViewHolder(v2);
            break;
        default:
            View v = inflater.inflate(android.R.layout.simple_list_item_1, parent, false);
            viewHolder = new ItemType1ViewHolder(v);
            break;
    }
    return viewHolder;
}

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {

    switch (holder.getItemViewType()) {
        case TYPE1:
            ItemType1ViewHolder vh1 = (ItemType1ViewHolder) holder;
            configureItemType1ViewHolder(vh1, position);
            break;
        case TYPE2:
            ItemType2ViewHolder vh2 = (ItemType2ViewHolder) holder;
            configureItemType2ViewHolder(vh2, position);
            break;
        default:
            ItemType1ViewHolder vh = (ItemType1ViewHolder) holder;
            configureItemType1ViewHolder(vh, position);
            break;
    }
}

private void configureItemType1ViewHolder(ItemType1ViewHolder vh1, int position) {
    ItemType1 itemType1 = (ItemType1) items.get(position);
    if (itemType1 != null) {
        Glide.with(vh1.itemImage1.getContext())
                .load(itemType1.getItemImage())
                .into(vh1.itemImage1);
        //vh1.itemImage1.setImageResource(R.drawable.bgeneral);
    }
}

private void configureItemType2ViewHolder(ItemType2ViewHolder vh2, int position) {
    ItemType2 itemType2 = (ItemType2) items.get(position);
    if (itemType2 != null) {
        Glide.with(vh2.itemImage2.getContext())
                .load(itemType2.getItemImage())
                .into(vh2.itemImage2);
    }
}}

1 ответ

Вместо этого вы можете использовать Glide в функции привязки в вашем видоискателе:

 public class ItemType1ViewHolder extends RecyclerView.ViewHolder
 {
  ImageView image;

 public ItemType1ViewHolder (View view)
 {
    super(view);
    image = (ImageView) view.findViewById(R.id.image);
 }

 public void bind(final ItemAdapter adapter, int position)
{
      // you should make items public and pass a context to your adapter

      Object object=(Object) adapter.items.get(position);
      Glide.with(adapter.context)
            .load(object.getItemImage())
            .into(image);

}

}

Другие вопросы по тегам