C# Xamarin Android:使用botton导航视图删除选定的recyclerview项目
我已经实现了一个C# Xamarin Android:使用botton导航视图删除选定的recyclerview项目,c#,xamarin.android,C#,Xamarin.android,我已经实现了一个RecyclerView,并且在我的页面上插入了一个底部导航,其中有一个删除按钮,我想删除选中的RecyclerView项目。我在获取项目位置的地方编写了代码,但在使用时: mEmails.RemoveAt(位置) 什么都没有发生 如何使用底部导航视图删除回收器视图中的选定项目 我的RecyclerView适配器: public class RecyclerAdapter : RecyclerView.Adapter, View.IOnClickListener {
RecyclerView
,并且在我的页面上插入了一个底部导航,其中有一个删除按钮,我想删除选中的RecyclerView项目。我在获取项目位置的地方编写了代码,但在使用时:
mEmails.RemoveAt(位置)代码>
什么都没有发生
如何使用底部导航视图删除回收器视图中的选定项目
我的RecyclerView适配器:
public class RecyclerAdapter : RecyclerView.Adapter, View.IOnClickListener
{
private List<Email> mEmails;
private Activity mActivity;
public static int listPosition;
private Boolean isSelected = false;
public Boolean IsSelected()
{
return isSelected;
}
public void setSelected(Boolean selected)
{
isSelected = selected;
}
public RecyclerAdapter(List<Email> emails, Activity activity)
{
mEmails = emails;
mActivity = activity;
}
public override int ItemCount => mEmails.Count;
public override RecyclerView.ViewHolder OnCreateViewHolder(ViewGroup parent, int viewType)
{
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)
{
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;
myHolder.ItemView.SetBackgroundColor(((Email)mEmails[position]).IsSelected() ? Color.LightBlue : Color.Transparent);
myHolder.ItemView.Tag = position;
myHolder.ItemView.SetOnClickListener(this);
}
void View.IOnClickListener.OnClick(View v)
{
int position = (int)v.Tag;
listPosition = (int)v.Tag;
((Email)mEmails[position]).setSelected(!((Email)mEmails[position]).IsSelected());
v.SetBackgroundColor(((Email)mEmails[position]).IsSelected() ? Color.LightBlue : Color.Transparent);
Toast.MakeText(v.Context, "Click : " + ((Email)mEmails[position]).date + "---" + position, ToastLength.Short).Show();
}
public void DeleteItem(int position)
{
mEmails.RemoveAt(position);
NotifyDataSetChanged();
NotifyItemChanged(listPosition);
}
}
公共类RecyclerAdapter:RecyclerView.Adapter,View.IOnClickListener
{
私人名单成员;
私人活动能力;
公共位置;
私有布尔值isSelected=false;
公选
{
选举产生的回报;
}
已选择公共无效设置(已选择布尔值)
{
isSelected=已选择;
}
公共回收适配器(列出电子邮件、活动)
{
mEmails=电子邮件;
活动性=活动性;
}
public override int ItemCount=>mEmails.Count;
public override RecyclerView.ViewHolder OnCreateViewHolder(视图组父级,int-viewType)
{
查看行=LayoutFlater.From(parent.Context).充气(Resource.Layout.row,parent,false);
RecyclerViewWolder=新的RecyclerViewWolder(行);
返回视图;
}
公共覆盖无效OnBindViewHolder(RecyclerView.ViewHolder,int位置)
{
RecyclerViewHolder myHolder=作为RecyclerViewHolder的持有人;
myHolder.mDate.Text=((电子邮件)mEmails[position])日期;
myHolder.mSubject.Text=((电子邮件)mEmails[position])。主题;
myHolder.mMessage.Text=((电子邮件)mEmails[position])。消息;
myHolder.ItemView.SetBackgroundColor(((电子邮件)mEmails[position]).IsSelected()?Color.LightBlue:Color.Transparent);
myHolder.ItemView.Tag=位置;
myHolder.ItemView.SetOnClickListener(this);
}
void View.IOnClickListener.OnClick(视图v)
{
int位置=(int)v.Tag;
listPosition=(int)v.Tag;
((电子邮件)mEmails[position]).setSelected(!((电子邮件)mEmails[position]).IsSelected());
v、 SetBackgroundColor(((电子邮件)mEmails[position]).IsSelected()?Color.LightBlue:Color.Transparent);
Toast.MakeText(v.Context,“单击:”+((电子邮件)mEmails[position]).date+“--”+position,ToastLength.Short.Show();
}
公共无效删除项(内部位置)
{
膜移除(位置);
NotifyDataSetChanged();
通知项已更改(列表位置);
}
}
我在其中调用我的底部导航视图:
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;
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(mEmails, this);
mRecyclerView.SetAdapter(mAdapter);
bottomnavigationview1 = FindViewById<BottomNavigationView>
(Resource.Id.bottom_navigation);
bottomnavigationview1.NavigationItemSelected += BottomNavigation_NavigationItemSelected;
}
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!!" });
}
private void BottomNavigation_NavigationItemSelected(object sender, BottomNavigationView.NavigationItemSelectedEventArgs e)
{
LoadFragment(e.Item.ItemId);
}
public void LoadFragment(int id)
{
Android.Support.V4.App.Fragment fragment = null;
switch (id)
{
case Resource.Id.bottomDelete:
RecyclerAdapter mAdapter = new RecyclerAdapter(mEmails, this);
mAdapter.DeleteItem(RecyclerAdapter.listPosition);
break;
}
if (fragment == null)
return;
SupportFragmentManager.BeginTransaction()
.Replace(Resource.Id.content_frame, fragment)
.Commit();
}
public类main活动:AppCompatActivity
{
公共静态回收视图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(mEmails,this);
mRecyclerView.SetAdapter(mAdapter);
bottomnavigationview1=FindViewById
(Resource.Id.bottom\u导航);
bottomnavigationview1.NavigationItemSelected+=BottomNavigation\u NavigationItemSelected;
}
私有void SetupList()
{
mEmails=新列表();
mEmails.Add(新电子邮件(){date=“9/25/2019”,Subject=“想出去玩吗?”,Message=“我明天就来!!”);
mEmails.Add(新电子邮件(){date=“9/25/2019”,Subject=“想出去玩吗?”,Message=“我明天就来!!”);
mEmails.Add(新电子邮件(){date=“9/25/2019”,Subject=“想出去玩吗?”,Message=“我明天就来!!”);
mEmails.Add(新电子邮件(){date=“9/24/2019”,Subject=“想出去玩吗?”,Message=“我明天就来!!”);
mEmails.Add(新电子邮件(){date=“9/24/2019”,Subject=“想出去玩吗?”,Message=“我明天就来!!”);
}
私有void BottomNavigation\u NavigationItemSelected(对象发送方,BottomNavigationView.NavigationItemSelectedEventArgs e)
{
LoadFragment(e.Item.ItemId);
}
公共void加载片段(int-id)
{
Android.Support.V4.App.Fragment Fragment=null;
开关(id)
{
case Resource.Id.bottomDelete:
RecyclerAdapter mAdapter=新的RecyclerAdapter(mEmails,this);
mAdapter.DeleteItem(RecyclerAdapter.listPosition);
打破
}
if(片段==null)
返回;
SupportFragmentManager.BeginTransaction()
.Replace(Resource.Id.content\u frame,fragment)
.Commit();
}
您可以尝试按如下方式修改代码
1.更换
public static RecyclerView.Adapter mAdapter;
与
2.只需变量mAdapter
的初始值,不要重新创建新的重复变量mAdapter。
因此,请替换以下代码:
RecyclerAdapter mAdapter = new RecyclerAdapter(mEmails, this);
与
3.删除codeRecyclerAdapter mAdapter=new RecyclerAdapter(mEmails,this);
,因为变量mAdapter
已在上面初始化
switch (id)
{
case Resource.Id.bottomDelete:
// remove this code
//RecyclerAdapter mAdapter = new RecyclerAdapter(mEmails, this);
mAdapter.DeleteItem(RecyclerAdapter.listPosition);
break;
}
更新:
您的应用程序中有两个bottom\u bar\u menu.xml
,一个在layout
文件夹中,另一个在menu
文件夹中,具体取决于您的公司
mAdapter = new RecyclerAdapter(mEmails, this);
switch (id)
{
case Resource.Id.bottomDelete:
// remove this code
//RecyclerAdapter mAdapter = new RecyclerAdapter(mEmails, this);
mAdapter.DeleteItem(RecyclerAdapter.listPosition);
break;
}
public void DeleteItem(int position)
{
if (mEmails!=null && mEmails.Count>0) {
mEmails.RemoveAt(position);
NotifyDataSetChanged();
NotifyItemChanged(listPosition);
}
}