I've been looking everywhere, unable to find anything. I managed to put up my recyclerview just right, the only thing missing is a header. In my listview I had previously, I just designed the first element to be my header. It was a linearlayout with some textviews and some images as clickable buttons inside. As for the RecyclerView I wasn't able to do that just yet. Can anyone here help me with this?
These are my 3 (working) classes for my recycler view:
class RecyclerViewAdapter : RecyclerView.Adapter
{
private List<DataForProfile> lstData = new List<DataForProfile>();
private Context ctx;
public RecyclerViewAdapter(List<DataForProfile> lstData, Context ctx)
{
this.lstData = lstData;
this.ctx = ctx;
}
public override void OnBindViewHolder(RecyclerView.ViewHolder holder, int position)
{
RecyclerViewHolder viewHolder = holder as RecyclerViewHolder;
viewHolder.txtTitle.Text = (lstData[position].description);
viewHolder.imageView.SetImageBitmap((lstData[position].img));
}
public override RecyclerView.ViewHolder OnCreateViewHolder(ViewGroup parent, int viewType)
{
LayoutInflater inflater = LayoutInflater.From(parent.Context);
View itemView = inflater.Inflate(Resource.Layout.RecView_Profile, parent, false);
return new RecyclerViewHolder(itemView, ctx);
}
//Get Number Of Items
public override int ItemCount
{
get
{
return lstData.Count;
}
}
}
public class DataForProfile
{
public int imageId { get; set; }
public Bitmap img { get; set; }
public string description { get; set; }
}
class RecyclerViewHolder : RecyclerView.ViewHolder
{
public ImageView imageView { get; set; }
public TextView txtTitle { get; set; }
public TextView txtDescription { get; set; }
public TextView txtDate { get; set; }
public TextView txtLikeCountBlue { get; set; }
public TextView txtLikeCountGreen { get; set; }
public TextView txtComments { get; set; }
private Typeface font;
private Context ctx;
public RecyclerViewHolder(View itemView, Context ctx) : base(itemView)
{
this.ctx = ctx;
txtTitle = itemView.FindViewById<TextView>(Resource.Id.RecView_Profile_TaskName);
imageView = itemView.FindViewById<ImageView>(Resource.Id.imageView1);
txtDescription = itemView.FindViewById<TextView>(Resource.Id.RecView_Profile_Description);
txtDate = itemView.FindViewById<TextView>(Resource.Id.RecView_Profile_Date);
txtLikeCountBlue = itemView.FindViewById<TextView>(Resource.Id.txt_recview_profile_blue);
txtLikeCountGreen = itemView.FindViewById<TextView>(Resource.Id.txt_recview_profile_green);
txtComments = itemView.FindViewById<TextView>(Resource.Id.txt_recview_profile_comments);
font = Typeface.CreateFromAsset(ctx.Assets, "CourierNew.ttf");
txtTitle.SetTypeface(font, TypefaceStyle.Bold);
txtDescription.SetTypeface(font, TypefaceStyle.Normal);
txtDate.SetTypeface(font, TypefaceStyle.Normal);
txtLikeCountBlue.SetTypeface(font, TypefaceStyle.Normal);
txtLikeCountGreen.SetTypeface(font, TypefaceStyle.Normal);
txtComments.SetTypeface(font, TypefaceStyle.Normal);
}
}
Any help at all would be awesome!
Okay, after doing some overrides - here is the working piece of code in order to do that:
class RecyclerViewAdapter : RecyclerView.Adapter
{
private List<DataForProfile> lstData = new List<DataForProfile>();
private Context ctx;
private static int TYPE_HEADER = 0;
private static int TYPE_ITEM = 2;
public RecyclerViewAdapter(List<DataForProfile> lstData, Context ctx)
{
this.lstData = lstData;
this.ctx = ctx;
}
public override void OnBindViewHolder(RecyclerView.ViewHolder holder, int position)
{
//Check oif Header orData
if (holder.GetType() == typeof(HeaderViewHolder))
{
HeaderViewHolder headerHolder = holder as HeaderViewHolder;
headerHolder.headerTitle.Text = "hall0";
headerHolder.headerTitle.Click += delegate
{
Toast.MakeText(ctx, "Header!", ToastLength.Long).Show();
};
headerHolder.headerImageView.Click += delegate
{
Toast.MakeText(ctx, "image!", ToastLength.Long).Show();
};
}
else if (holder.GetType() == typeof(RecyclerViewHolder))
{
RecyclerViewHolder viewHolder = holder as RecyclerViewHolder;
viewHolder.txtTitle.Text = (lstData[position-1].description); // - 1 because of the header
viewHolder.imageView.SetImageBitmap((lstData[position-1].img));
}
}
// What layout to be inflated?
public override RecyclerView.ViewHolder OnCreateViewHolder(ViewGroup parent, int viewType)
{
if (viewType == TYPE_ITEM)
{
// Data
LayoutInflater inflater = LayoutInflater.From(parent.Context);
View itemView = inflater.Inflate(Resource.Layout.RecView_Profile, parent, false);
return new RecyclerViewHolder(itemView, ctx);
}
else if (viewType == TYPE_HEADER)
{
//Inflating header view
LayoutInflater inflater = LayoutInflater.From(parent.Context);
View itemView = inflater.Inflate(Resource.Layout.testheader, parent, false);
return new HeaderViewHolder(itemView, ctx);
}
else return null;
}
// Get Number Of Items
public override int ItemCount
{
get
{
return lstData.Count + 1; // +1 due to the header
}
}
// Custom Override to decided whether its the header or the data
public override int GetItemViewType(int position)
{
if (position == 0)
{
return TYPE_HEADER;
}
else if (position == lstData.Count() + 1) //+1 wegen des Headers
{
return TYPE_ITEM;;
}
return TYPE_ITEM;
}
}
// class for header
public class HeaderViewHolder : RecyclerView.ViewHolder
{
public TextView headerTitle;
public ImageView headerImageView;
public HeaderViewHolder(View itemView, Context ctx) : base(itemView)
{
headerTitle = itemView.FindViewById<TextView>(Resource.Id.testheadertitle);
headerImageView = itemView.FindViewById<ImageView>(Resource.Id.testheaderbutton);
}
}
// xml
class RecyclerViewHolder : RecyclerView.ViewHolder
{
public ImageView imageView { get; set; }
public TextView txtTitle { get; set; }
public TextView txtDescription { get; set; }
public TextView txtDate { get; set; }
public TextView txtLikeCountBlue { get; set; }
public TextView txtLikeCountGreen { get; set; }
public TextView txtComments { get; set; }
private Typeface font;
private Context ctx;
public RecyclerViewHolder(View itemView, Context ctx) : base(itemView)
{
this.ctx = ctx;
txtTitle = itemView.FindViewById<TextView>(Resource.Id.RecView_Profile_TaskName);
imageView = itemView.FindViewById<ImageView>(Resource.Id.imageView1);
txtDescription = itemView.FindViewById<TextView>(Resource.Id.RecView_Profile_Description);
txtDate = itemView.FindViewById<TextView>(Resource.Id.RecView_Profile_Date);
txtLikeCountBlue = itemView.FindViewById<TextView>(Resource.Id.txt_recview_profile_blue);
txtLikeCountGreen = itemView.FindViewById<TextView>(Resource.Id.txt_recview_profile_green);
txtComments = itemView.FindViewById<TextView>(Resource.Id.txt_recview_profile_comments);
font = Typeface.CreateFromAsset(ctx.Assets, "CourierNew.ttf");
txtTitle.SetTypeface(font, TypefaceStyle.Bold);
txtDescription.SetTypeface(font, TypefaceStyle.Normal);
txtDate.SetTypeface(font, TypefaceStyle.Normal);
txtLikeCountBlue.SetTypeface(font, TypefaceStyle.Normal);
txtLikeCountGreen.SetTypeface(font, TypefaceStyle.Normal);
txtComments.SetTypeface(font, TypefaceStyle.Normal);
}
}
public class DataForProfile
{
public int imageId { get; set; }
public Bitmap img { get; set; }
public string description { get; set; }
}
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.