CardView를 사용하여 RecyclerView를 구현하려고하는데 카드는 텍스트 뷰가있는 이미지 뷰일뿐입니다. 처음에는 모든 것이 의도대로 작동하지만 예를 들어 아래로 스크롤 한 다음 recyclerView에서 백업하면 imageViews가 비어 있습니다. textviews는 정상입니다. 어떤 일이 일어나는지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();
}
}
// ...
}
내 생각 엔 - 그것은 할당 함께 할 수있는 뭔가가 이미지 뷰 소스를 bitm으로 스트림에서 디코딩되고 모델에 비트 맵 자체를 저장하지 않습니다. 그러나 System.Drawable은 PCL의 일부가 아니기 때문에 그렇게 할 수 없습니다.
@jzeferino 피카소를 구현하면 실제로 해결되었습니다. 감사합니다. –
정확한 답으로 표시해주십시오. 나는 그것을 울부 짖었다. – jzeferino