【发布时间】:2018-09-15 17:02:42
【问题描述】:
我正在使用 recyclerView,我成功地扩充了两个视图,但每个视图内容来自不同的 json 数据类型。我尝试在适配器中传递这两种数据类型,但它们没有正确绑定
-
源代码
公共类 SimpleStringRecyclerViewAdapter : RecyclerView.Adapter {
private Article[] mValues; private List<YouTubeItem> mValues2; Context context; public SimpleStringRecyclerViewAdapter(Context context, Article[] items, List<YouTubeItem> item ) { this.context = context; mValues = items; mValues2 = item; } public override int ItemCount { get { return mValues.Count() + mValues2.Count(); } } public override void OnBindViewHolder(RecyclerView.ViewHolder holder, int position) { if (holder is SimpleViewHolder) try { Article item = mValues[position]; var simpleHolder = holder as SimpleViewHolder; simpleHolder.mTxtView.Text = Android.Text.Html.FromHtml(item.Title).ToString(); simpleHolder.mTxtView2.Text = item.Description; using (var imageView = simpleHolder.mImageView) { string url = Android.Text.Html.FromHtml(item.UrlToImage).ToString(); //Download and display image UrlImageViewHelper.SetUrlDrawable(imageView, url, Resource.Drawable.cheese_1 ); } // simpleHolder.mprogressbar.Visibility = ViewStates.Gone; } catch (Exception e) { //Toast.MakeText(this.context, e.ToString(), ToastLength.Long).Show(); } else { try { YouTubeItem item = mValues2[position]; var simpleHolder = holder as SimpleViewHolder2; simpleHolder.mTxtView.Text = Android.Text.Html.FromHtml(item.Title).ToString(); // simpleHolder.mTxtView2.Text = item.DescriptionShort; using (var imageView = simpleHolder.mImageView) { string url = Android.Text.Html.FromHtml(item.MaxResThumbnailUrl).ToString(); //Download and display image UrlImageViewHelper.SetUrlDrawable(imageView, url, Resource.Drawable.cheese_1 ); } } catch (Exception e) { //Toast.MakeText(this.context, e.ToString(), ToastLength.Long).Show(); } } } public override int GetItemViewType(int position) { if ((position % 2) == 0) { //Even number return Resource.Layout.List_Item; } else { //Odd number return Resource.Layout.VideoList; } } public override RecyclerView.ViewHolder OnCreateViewHolder(ViewGroup parent, int viewType) { if (viewType == Resource.Layout.List_Item) { View view = LayoutInflater.From(parent.Context).Inflate(Resource.Layout.List_Item, parent, false); view.SetBackgroundColor(Color.White); SimpleViewHolder holder = new SimpleViewHolder(view); // holder.mprogressbar = view.FindViewById<ProgressBar>(Resource.Id.progressBar); // holder.mprogressbar.Visibility = ViewStates.Visible; //Showing loading progressbar return holder; } else { View view = LayoutInflater.From(parent.Context).Inflate(Resource.Layout.VideoList, parent, false); view.SetBackgroundColor(Color.White); SimpleViewHolder2 holder = new SimpleViewHolder2(view); return holder; } }}
公共类 SimpleViewHolder : RecyclerView.ViewHolder { 公共字符串 mBoundString; 公共只读视图 mView; 公共只读 ImageView mImageView; 公共只读TextView mTxtView; 公共只读TextView mTxtView2; // public ProgressBar mprogressbar;
public SimpleViewHolder(View view) : base(view) { mView = view; mImageView = view.FindViewById<ImageView>(Resource.Id.avatar); mTxtView = view.FindViewById<TextView>(Resource.Id.Text1); mTxtView2 = view.FindViewById<TextView>(Resource.Id.Text2); // mprogressbar = view.FindViewById<ProgressBar>(Resource.Id.progressBar); } public override string ToString() { return base.ToString() + " '" + mTxtView.Text; }} 公共类 SimpleViewHolder2 : RecyclerView.ViewHolder { 公共字符串 mBoundString; 公共只读视图 mView; 公共只读 ImageView mImageView; 公共只读TextView mTxtView; public readonly TextView mTxtView2;
public SimpleViewHolder2(View view) : base(view) { mView = view; mImageView = view.FindViewById<ImageView>(Resource.Id.videoavatar); mTxtView = view.FindViewById<TextView>(Resource.Id.videoText1); // mprogressbar = view.FindViewById<ProgressBar>(Resource.Id.progressBar); }
【问题讨论】:
-
您必须将两个列表合并为一个。
标签: android android-recyclerview xamarin.android