C# Xamarin Android:为什么在recyclerview上用三个键按组划分元素不起作用?
大家好,我叫谷口 我已经实现了一个recyclerview,并将recyclerview项划分为一个组。当我尝试分成两组时,不会显示代码错误,但回收器上的所有项目都只显示viewholder textview名称 如下图所示: 第一类名单:C# Xamarin Android:为什么在recyclerview上用三个键按组划分元素不起作用?,c#,xamarin.android,C#,Xamarin.android,大家好,我叫谷口 我已经实现了一个recyclerview,并将recyclerview项划分为一个组。当我尝试分成两组时,不会显示代码错误,但回收器上的所有项目都只显示viewholder textview名称 如下图所示: 第一类名单: public class DateNow : ListItem { public string dateNow{ set; get; } public override int getType() { return
public class DateNow : ListItem
{
public string dateNow{ set; get; }
public override int getType()
{
return TYPE_HEADER_NOW;
}
}
public class DateYesterday : ListItem
{
public string dateYesterday { set; get; }
public override int getType()
{
return TYPE_HEADER_YESTERDAY;
}
}
第一观众:
public class RecyclerViewNowHolder : RecyclerView.ViewHolder
{
public TextView mDateNow;
public RecyclerViewNowHolder(View itemView) : base(itemView)
{
mDateNow = itemView.FindViewById<TextView>(Resource.Id.mDateNow);
}
}
public class RecyclerViewYesterdayHolder : RecyclerView.ViewHolder
{
public TextView mDateYesterday;
public RecyclerViewYesterdayHolder(View itemView) : base(itemView)
{
mDateYesterday = itemView.FindViewById<TextView>(Resource.Id.mDateYesterday);
}
}
第二个持证人:
public class RecyclerViewNowHolder : RecyclerView.ViewHolder
{
public TextView mDateNow;
public RecyclerViewNowHolder(View itemView) : base(itemView)
{
mDateNow = itemView.FindViewById<TextView>(Resource.Id.mDateNow);
}
}
public class RecyclerViewYesterdayHolder : RecyclerView.ViewHolder
{
public TextView mDateYesterday;
public RecyclerViewYesterdayHolder(View itemView) : base(itemView)
{
mDateYesterday = itemView.FindViewById<TextView>(Resource.Id.mDateYesterday);
}
}
我的recyclerview适配器:
public class RecyclerAdapter : RecyclerView.Adapter
{
private Activity mActivity;
private List<ListItem> mEmails;
private Context context;
public RecyclerAdapter(List<ListItem> emails, Context context)
{
mEmails = emails;
this.context = context;
}
public RecyclerAdapter(List<ListItem> emails, Activity activity)
{
mEmails = emails;
mActivity = activity;
}
public class MyView : RecyclerView.ViewHolder
{
public View mMainView { get; set; }
public TextView mName { get; set; }
public TextView mSubject { get; set; }
public TextView mMessage { get; set; }
public MyView(View view) : base(view)
{
mMainView = view;
}
}
public override int ItemCount
{
get { return mEmails.Count; }
}
public override int GetItemViewType(int position)
{
return mEmails[position].getType();
}
public override RecyclerView.ViewHolder OnCreateViewHolder(ViewGroup parent, int viewType)
{
if (viewType == ListItem.TYPE_HEADER_NOW)
{
View headNow = LayoutInflater.From(parent.Context).Inflate(Resource.Layout.recyclerviewNow, parent, false);
RecyclerViewNowHolder view = new RecyclerViewNowHolder(headNow);
return view;
}
else if (viewType == ListItem.TYPE_HEADER_YESTERDAY)
{
View headYesterday = LayoutInflater.From(parent.Context).Inflate(Resource.Layout.recyclerviewYesterday, parent, false);
RecyclerViewYesterdayHolder view = new RecyclerViewYesterdayHolder(headYesterday);
return view;
}
else
{
View row = LayoutInflater.From(parent.Context).Inflate(Resource.Layout.row, parent, false);
RecyclerViewHolder view = new RecyclerViewHolder(row);
return view;
}
}
public override void OnBindViewHolder(RecyclerView.ViewHolder holder, int position)
{
int type = GetItemViewType(position);
if (type == ListItem.TYPE_HEADER_NOW)
{
RecyclerViewNowHolder myHolder = holder as RecyclerViewNowHolder;
myHolder.mDateNow.Text = "Hoje";
}
else if (type == ListItem.TYPE_HEADER_YESTERDAY)
{
RecyclerViewYesterdayHolder myHolder = holder as RecyclerViewYesterdayHolder;
myHolder.mDateYesterday.Text = "Ontem";
}
else
{
RecyclerViewHolder myHolder = holder as RecyclerViewHolder;
myHolder.mDate.Text = ((Email)mEmails[position]).date;
myHolder.mSubject.Text = ((Email)mEmails[position]).Subject;
myHolder.mMessage.Text = ((Email)mEmails[position]).Message;
}
}
}
公共类RecyclerAdapter:RecyclerView.Adapter
{
私人活动能力;
私人名单成员;
私人语境;
公共回收适配器(列出电子邮件、上下文)
{
mEmails=电子邮件;
this.context=上下文;
}
公共回收适配器(列出电子邮件、活动)
{
mEmails=电子邮件;
活动性=活动性;
}
公共类MyView:RecyclerView.ViewHolder
{
公共视图mMainView{get;set;}
公共文本视图mName{get;set;}
公共文本视图mSubject{get;set;}
公共文本视图消息{get;set;}
公共MyView(视图):基本(视图)
{
mMainView=视图;
}
}
公共覆盖int ItemCount
{
获取{return mEmails.Count;}
}
公共覆盖int GetItemViewType(int位置)
{
返回mEmails[position].getType();
}
public override RecyclerView.ViewHolder OnCreateViewHolder(视图组父级,int-viewType)
{
如果(viewType==ListItem.TYPE\u HEADER\u NOW)
{
View headNow=LayoutInflater.From(parent.Context).充气(Resource.Layout.recyclervewnow,parent,false);
RecyclerViewNewHolder视图=新的RecyclerViewHolder(headNow);
返回视图;
}
else if(viewType==ListItem.TYPE\u HEADER\u)
{
View HeadDayed=LayoutInflater.From(parent.Context).充气(Resource.Layout.RecycleServiceWeestDay,parent,false);
RecyclerViewEyesterDayHolder视图=新的RecyclerViewEyesterDayHolder(HeadDayHolder);
返回视图;
}
其他的
{
查看行=LayoutFlater.From(parent.Context).充气(Resource.Layout.row,parent,false);
RecyclerViewWolder=新的RecyclerViewWolder(行);
返回视图;
}
}
公共覆盖无效OnBindViewHolder(RecyclerView.ViewHolder,int位置)
{
int type=GetItemViewType(位置);
if(type==ListItem.type\u HEADER\u NOW)
{
RecycleServiceWnowHolder myHolder=作为RecycleServiceWnowHolder的持有人;
myHolder.mDateNow.Text=“Hoje”;
}
else if(type==ListItem.type\u HEADER\u)
{
RecyclerViewEsterDayHolder myHolder=作为RecyclerViewEsterDayHolder的持有人;
myHolder.mdateDateDayed.Text=“Ontem”;
}
其他的
{
RecyclerViewHolder myHolder=作为RecyclerViewHolder的持有人;
myHolder.mDate.Text=((电子邮件)mEmails[position])日期;
myHolder.mSubject.Text=((电子邮件)mEmails[position])。主题;
myHolder.mMessage.Text=((电子邮件)mEmails[position])。消息;
}
}
}
我的主要活动课:
[Activity(Label = "@string/app_name", Theme = "@style/AppTheme", MainLauncher = true)]
public class MainActivity : AppCompatActivity
{
public static RecyclerView mRecyclerView;
public static RecyclerView.LayoutManager mLayoutManager;
public RecyclerView.ViewHolder holder;
public static BottomNavigationView bottomnavigationview1;
public static RecyclerView.Adapter mAdapter;
public static List<Email> mEmails;
private List<ListItem> mItems;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
Xamarin.Essentials.Platform.Init(this, bundle);
// Set our view from the "main" layout resource
SetContentView(Resource.Layout.activity_main);
mRecyclerView = FindViewById<RecyclerView>(Resource.Id.recyclerViwer);
mRecyclerView.AddItemDecoration(new DividerItemDecoration(mRecyclerView.Context, DividerItemDecoration.Vertical));
mRecyclerView.HasFixedSize = true;
SetupList();
//Create our layout Manager
mLayoutManager = new LinearLayoutManager(this);
mRecyclerView.SetLayoutManager(mLayoutManager);
RecyclerAdapter mAdapter = new RecyclerAdapter(mItems, this);
mRecyclerView.SetAdapter(mAdapter);
}
private void SetupList()
{
mEmails = new List<Email>();
mEmails.Add(new Email() { date = "9/24/2019", Subject = "Wanna Hang Out?", Message = "I ' ll be around tomorrow!!" });
mEmails.Add(new Email() { date = "9/23/2019", Subject = "Wanna Hang Out?", Message = "I ' ll be around tomorrow!!" });
mEmails.Add(new Email() { date = "9/19/2019", Subject = "Wanna Hang Out?", Message = "I ' ll be around tomorrow!!" });
mEmails.Add(new Email() { date = "9/19/2019", Subject = "Wanna Hang Out?", Message = "I ' ll be around tomorrow!!" });
mEmails.Add(new Email() { date = "9/19/2019", Subject = "Wanna Hang Out?", Message = "I ' ll be around tomorrow!!" });
mEmails.Add(new Email() { date = "8/19/2019", Subject = "Wanna Hang Out?", Message = "I ' ll be around tomorrow!!" });
mEmails.Add(new Email() { date = "8/19/2019", Subject = "Wanna Hang Out?", Message = "I ' ll be around tomorrow!!" });
mEmails.Add(new Email() { date = "7/19/2019", Subject = "Wanna Hang Out?", Message = "I ' ll be around tomorrow!!" });
mEmails.Add(new Email() { date = "7/19/2019", Subject = "Wanna Hang Out?", Message = "I ' ll be around tomorrow!!" });
mEmails.Add(new Email() { date = "6/19/2019", Subject = "Wanna Hang Out?", Message = "I ' ll be around tomorrow!!" });
mEmails.Add(new Email() { date = "6/19/2019", Subject = "Wanna Hang Out?", Message = "I ' ll be around tomorrow!!" });
mEmails.Add(new Email() { date = "5/19/2019", Subject = "Wanna Hang Out?", Message = "I ' ll be around tomorrow!!" });
mEmails.Add(new Email() { date = "5/19/2019", Subject = "Wanna Hang Out?", Message = "I ' ll be around tomorrow!!" });
mEmails.Add(new Email() { date = "4/19/2019", Subject = "Wanna Hang Out?", Message = "I ' ll be around tomorrow!!" });
mEmails.Add(new Email() { date = "4/19/2019", Subject = "Wanna Hang Out?", Message = "I ' ll be around tomorrow!!" });
mEmails.Add(new Email() { date = "9/19/2018", Subject = "Wanna Hang Out?", Message = "I ' ll be around tomorrow!!" });
mEmails.Add(new Email() { date = "9/19/2018", Subject = "Wanna Hang Out?", Message = "I ' ll be around tomorrow!!" });
List<string> dateList = new List<string>();
List<DateNow> dateItems = new List<DateNow>();
List<DateYesterday> dateYesterday = new List<DateYesterday>();
mItems = new List<ListItem>();
foreach (var email in mEmails)
{
if (!dateList.Contains(email.date))
{
dateList.Add(email.date);
dateItems.Add(new DateNow() { dateNow = email.date });
dateYesterday.Add(new DateYesterday() { dateYesterday = email.date });
}
}
DateTime today = DateTime.Today;
string sub = today.ToString().Substring(0, 9);
int yesterday = Convert.ToInt32(today.Day.ToString()) - 1;
foreach (var date in dateItems)
{
mItems.Add(date);
foreach (var email in mEmails)
{
if (date.dateNow.Equals(DateTime.Now.Day.ToString()))
{
mItems.Add(email);
}
}
}
}
[活动(标签=“@string/app_name”,Theme=“@style/AppTheme”,MainLauncher=true)]
公共类MainActivity:AppCompativeActivity
{
公共静态回收视图mRecyclerView;
publicstaticrecyclerview.LayoutManager mllayoutmanager;
公共回收视图持有者;
公共静态BottomNavigationView bottomnavigationview1;
公共静态RecyclerView.AdapterMadapter;
公共静态列表成员;
私人名单;
创建时受保护的覆盖无效(捆绑包)
{
base.OnCreate(bundle);
Xamarin.Essentials.Platform.Init(这个包);
//从“主”布局资源设置视图
SetContentView(Resource.Layout.activity_main);
mRecyclerView=findviewbyd(Resource.Id.recyclerower);
添加装饰(新的DividerItemDecoration(mRecyclerView.Context,DividerItemDecoration.Vertical));
mRecyclerView.HasFixedSize=true;
SetupList();
//创建我们的布局管理器
mLayoutManager=新的LinearLayoutManager(此);
mRecyclerView.SetLayoutManager(mllayoutmanager);
RecyclerAdapter mAdapter=新的RecyclerAdapter(mItems,this);
mRecyclerView.SetAdapter(mAdapter);
}
私有void SetupList()
{
mEmails=新列表();
mEmails.Add(新电子邮件(){date=“9/24/2019”,Subject=“想出去玩吗?”,Message=“我明天就来!!”);
mEmails.Add(新电子邮件(){date=“9/23/2019”,Subject=“想出去玩吗?”,Message=“我明天就来!!”);
mEmails.Add(新电子邮件(){date=“9/19/2019”,Subject=“想出去玩吗?”,Message=“我明天就来!!”);
mEmails.Add(新电子邮件(){date=“9/19/2019”,Subject=“想出去玩吗?”,Message=“我明天就来!!”);
mEmails.Add(新电子邮件(){date=“9/19/2019”,Subject=“想出去玩吗?”,Message=“我明天就来!!”);
mEmails.Add(新电子邮件(){date=“8/19/2019”,Subject=“想出去玩吗?”,Message=“我明天就来!!”);
mEmails.Add(新电子邮件(){date=“8/19/2019”,Subject=“想出去玩吗?”,Message=“我明天就来!!”);
mEmails.Add(新电子邮件(){date=“7/19/2019”,Subject=“想出去玩吗?”,Message=“我明天就来!!”);
mEmails.Add(新电子邮件(){date=“7/19/2019”,Subject=“想出去玩吗?”,Message=“我明天就来!!”);
mEmails.Add(新电子邮件(){date=“6/19/2019”,Subject=“想出去玩吗?”,Message=“我明天就来!!”);
mEmails.Add(新电子邮件(){date=“6/19/2019”,Subject=“Wan
List<string> dateList = new List<string>();
List<DateNow> dateItems = new List<DateNow>();
List<DateYesterday> dateYesterday = new List<DateYesterday>();
mItems = new List<ListItem>();
foreach (var email in mEmails)
{
if (!dateList.Contains(email.date))
{
dateList.Add(email.date);
dateItems.Add(new DateNow() { dateNow = email.date });
dateYesterday.Add(new DateYesterday() { dateYesterday = email.date });
}
}
foreach (var date in dateYesterday) {
mItems.Add(date);
}
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
Xamarin.Essentials.Platform.Init(this, bundle);
// Set our view from the "main" layout resource
SetContentView(Resource.Layout.activity_main);
mRecyclerView = FindViewById<RecyclerView>(Resource.Id.recyclerViwer);
mRecyclerView.AddItemDecoration(new DividerItemDecoration(mRecyclerView.Context, DividerItemDecoration.Vertical));
mRecyclerView.HasFixedSize = true;
SetupList();
//Create our layout Manager
mLayoutManager = new LinearLayoutManager(this);
mRecyclerView.SetLayoutManager(mLayoutManager);
RecyclerAdapter mAdapter = new RecyclerAdapter(mItems, this);
mRecyclerView.SetAdapter(mAdapter);
}
private void SetupList()
{
mEmails = new List<Email>();
mEmails.Add(new Email() { date = "9/25/2019", Subject = "Wanna Hang Out?", Message = "I ' ll be around tomorrow!!" });
mEmails.Add(new Email() { date = "9/25/2019", Subject = "Wanna Hang Out?", Message = "I ' ll be around tomorrow!!" });
mEmails.Add(new Email() { date = "9/25/2019", Subject = "Wanna Hang Out?", Message = "I ' ll be around tomorrow!!" });
mEmails.Add(new Email() { date = "9/24/2019", Subject = "Wanna Hang Out?", Message = "I ' ll be around tomorrow!!" });
mEmails.Add(new Email() { date = "9/24/2019", Subject = "Wanna Hang Out?", Message = "I ' ll be around tomorrow!!" });
mEmails.Add(new Email() { date = "9/24/2019", Subject = "Wanna Hang Out?", Message = "I ' ll be around tomorrow!!" });
mEmails.Add(new Email() { date = "9/23/2019", Subject = "Wanna Hang Out?", Message = "I ' ll be around tomorrow!!" });
mEmails.Add(new Email() { date = "9/19/2019", Subject = "Wanna Hang Out?", Message = "I ' ll be around tomorrow!!" });
mEmails.Add(new Email() { date = "9/19/2019", Subject = "Wanna Hang Out?", Message = "I ' ll be around tomorrow!!" });
mEmails.Add(new Email() { date = "9/19/2019", Subject = "Wanna Hang Out?", Message = "I ' ll be around tomorrow!!" });
mEmails.Add(new Email() { date = "8/19/2019", Subject = "Wanna Hang Out?", Message = "I ' ll be around tomorrow!!" });
mEmails.Add(new Email() { date = "8/19/2019", Subject = "Wanna Hang Out?", Message = "I ' ll be around tomorrow!!" });
mEmails.Add(new Email() { date = "7/19/2019", Subject = "Wanna Hang Out?", Message = "I ' ll be around tomorrow!!" });
mEmails.Add(new Email() { date = "7/19/2019", Subject = "Wanna Hang Out?", Message = "I ' ll be around tomorrow!!" });
mEmails.Add(new Email() { date = "6/19/2019", Subject = "Wanna Hang Out?", Message = "I ' ll be around tomorrow!!" });
mEmails.Add(new Email() { date = "6/19/2019", Subject = "Wanna Hang Out?", Message = "I ' ll be around tomorrow!!" });
mEmails.Add(new Email() { date = "5/19/2019", Subject = "Wanna Hang Out?", Message = "I ' ll be around tomorrow!!" });
mEmails.Add(new Email() { date = "5/19/2019", Subject = "Wanna Hang Out?", Message = "I ' ll be around tomorrow!!" });
mEmails.Add(new Email() { date = "4/19/2019", Subject = "Wanna Hang Out?", Message = "I ' ll be around tomorrow!!" });
mEmails.Add(new Email() { date = "4/19/2019", Subject = "Wanna Hang Out?", Message = "I ' ll be around tomorrow!!" });
mEmails.Add(new Email() { date = "9/19/2018", Subject = "Wanna Hang Out?", Message = "I ' ll be around tomorrow!!" });
mEmails.Add(new Email() { date = "9/19/2018", Subject = "Wanna Hang Out?", Message = "I ' ll be around tomorrow!!" });
List<string> dateList = new List<string>();
List<DateNow> dateNow = new List<DateNow>();
List<DateYesterday> dateYesterday = new List<DateYesterday>();
mItems = new List<ListItem>();
foreach (var email in mEmails)
{
if (!dateList.Contains(email.date))
{
dateList.Add(email.date);
dateNow.Add(new DateNow() { dateNow = email.date });
dateYesterday.Add(new DateYesterday() { dateYesterday = email.date });
}
}
DateTime today = DateTime.Today;
string sub = today.ToString().Substring(0, 9);
int yesterday = Convert.ToInt32(today.Day.ToString()) - 1;
string ontem = today.Month.ToString() + "/" + yesterday.ToString() + "/" + today.Year.ToString() ;
foreach (var date in dateNow)
{
if (date.dateNow.Equals(sub))
{
mItems.Add(date);
foreach (var email in mEmails)
{
if (email.date.Equals(sub))
{
mItems.Add(email);
}
}
}
else if (date.dateNow.Equals(ontem))
{
foreach (var DateYesterday in dateYesterday)
{
if (DateYesterday.dateYesterday.Equals(ontem))
{
mItems.Add(DateYesterday);
foreach (var email in mEmails)
{
if (email.date.Equals(ontem))
{
mItems.Add(email);
}
}
}
}
}
else
{
foreach (var email in mEmails)
{
if (!email.date.Equals(sub) && !email.date.Equals(ontem))
{
mItems.Add(email);
}
}
}
}
}