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);
}
}