Я пытаюсь реализовать RecyclerView с помощью CardView, карты - это просто изображения с текстом поверх него. Сначала все работает по назначению, но если вы, например, прокрутите вниз, а затем создадите резервную копию в recyclerView, тогда imageViews будет пустым, текстовые просмотры будут прекрасными.Xamarin.Droid RecyclerView показывает изображение только один раз
GIF что происходит
адаптер:
public class NewsCardAdapter : RecyclerView.Adapter
{
private List<RSSItem> items;
public NewsCardAdapter()
{
HasStableIds = true;
}
public override RecyclerView.ViewHolder OnCreateViewHolder(ViewGroup parent, int viewType)
{
var view = LayoutInflater.From(parent.Context).Inflate(Resource.Layout.NewsItem, parent, false);
NewsViewHolder viewHolder = new NewsViewHolder(view);
return viewHolder;
}
public override long GetItemId(int position)
{
return items[position].Id;
}
public override async void OnBindViewHolder(RecyclerView.ViewHolder viewHolder, int position)
{
var item = items[position];
var holder = viewHolder as NewsViewHolder;
if (item.ThumbNail != null)
{
holder.ImgThumbnail.SetImageBitmap(await BitmapFactory.DecodeStreamAsync(item.ThumbNail));
}
else
{
// Place holder in case item doesn't have thumbnail
holder.ImgThumbnail.SetImageResource(Resource.Drawable.Icon);
}
holder.Title.Text = item.Title;
}
public override int ItemCount => items.Count;
public List<RSSItem> Items
{
get { return items; }
set { items = value; }
}
}
public class NewsViewHolder : RecyclerView.ViewHolder
{
private ImageView imgThumbnail;
private TextView title;
public NewsViewHolder(View itemView) : base(itemView)
{
imgThumbnail = itemView.FindViewById<ImageView>(Resource.Id.img_thumbnail);
title = itemView.FindViewById<TextView>(Resource.Id.news_title);
}
public ImageView ImgThumbnail
{
get { return imgThumbnail; }
set { imgThumbnail = value; }
}
public TextView Title
{
get { return title; }
set { title = value; }
}
}
Модель (RSSItem):
public class RSSItem : INotifyPropertyChanged
{
[PrimaryKey, AutoIncrement]
public long Id { get; set; }
public string Title { get; set; }
private Stream thumbnail;
[Ignore]
public Stream ThumbNail
{
get { return thumbnail; }
set
{
thumbnail = value;
OnPropertyChanged();
}
}
// ...
}
Мое предположение - это что-то делать с назначением imageView источник для битма ap декодируется из потока и не хранит битмап в модели. Однако я не могу этого сделать, поскольку System.Drawable не является частью PCL.
@jzeferino Реализация Пикассо фактически решила его, спасибо! –
Пожалуйста, отметьте мой ответ как правильный. Я добавил его ниже. – jzeferino