Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Xamarin Android:使用botton导航视图删除选定的recyclerview项目_C#_Xamarin.android - Fatal编程技术网

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.删除code
RecyclerAdapter 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);
        }
    }