此列表视图中发生了什么



我有一个ListView,当我单击其中的项目时,会出现一个带有"保存和删除"按钮的对话框片段。一切正常,它会正确更新适配器,从 ListView 中删除或更新项目。现在的问题是,当我删除顶部项目或另一个项目上方的项目时,但让我们说有两个项目,因为它更容易。当我删除顶部项时,它会从 ListView 中删除,但是当我单击同一位置时,因为现在底部项移动到顶部,旧项数据将显示在 DialogFragment 中。换句话说,我正在选择旧项目。这是代码:

using Android.App;
using Android.Content;
using Android.OS;
using Android.Views;
using Android.Widget;
using System;
using System.Collections.Generic;
namespace Zrelya.Fragments
{
    public class ViewPlans : FragmentSuper
    {
        private Context mContext;
        private ORM.DBRep dbr;
        private static Adapters.Plan Adapter;
        private static ListView listView;
        private static List<ORM.Plan> plansList = new List<ORM.Plan>();

        public ViewPlans(Context context)
        {
            mContext = context;
        }
        public override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            // Create your fragment here
            dbr = new ORM.DBRep();
        }
        public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
        {
            // Use this to return your custom view for this Fragment
            var view = inflater.Inflate(Resource.Layout.ViewPlans, container, false);
            listView = view.FindViewById<ListView>(Resource.Id.listView);
            plansList = dbr.GetPlans();
            Adapter = new Adapters.Plan(mContext, plansList);
            listView.Adapter = Adapter;
            listView.ItemClick += (o, e) =>
            {
                Activity.RunOnUiThread(()=> {
                    plansList = dbr.GetPlans();
                    DialogViewPlan(plansList[e.Position]);
                });
            };
            return view;
        }

        private void DialogViewPlan(ORM.Plan plan)
        {
            if (plan != null)
            {
                FragmentTransaction transaction = Activity.FragmentManager.BeginTransaction();
                Helpers.DialogViewPlan dialog = new Helpers.DialogViewPlan(Activity, plan);
                dialog.Show(transaction, "dialog");
                dialog.OnDelete += delegate
                {

                    Activity.RunOnUiThread(()=> {
                        plansList.Remove(plan);
                        Adapter = new Adapters.Plan(mContext, plansList);
                        Adapter.NotifyDataSetChanged();
                        listView.Adapter = Adapter;
                    });

                };
                dialog.OnSave += delegate
                {
                    Adapter = new Adapters.Plan(mContext, dbr.GetPlans());
                    Adapter.NotifyDataSetChanged();
                    listView.Adapter = Adapter;
                };
            }
        }
    }
} 

在几个链接的帮助下:

Android:如何从列表中删除项目视图和arrayAdapter

通过单击项目上的按钮删除列表视图项目

以下是您修剪的代码,请尝试一下。

using Android.App;
using Android.Content;
using Android.OS;
using Android.Views;
using Android.Widget;
using System;
using System.Collections.Generic;
namespace Zrelya.Fragments
{
    public class ViewPlans : FragmentSuper
    {
        private Context mContext;
        private ORM.DBRep dbr;
        private static Adapters.Plan Adapter;
        private static ListView listView;
        private static List<ORM.Plan> plansList = new List<ORM.Plan>();

        public ViewPlans(Context context)
        {
            mContext = context;
        }
        public override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            // Create your fragment here
            dbr = new ORM.DBRep();
        }
        public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
        {
            // Use this to return your custom view for this Fragment
            var view = inflater.Inflate(Resource.Layout.ViewPlans, container, false);
            listView = view.FindViewById<ListView>(Resource.Id.listView);
            plansList = dbr.GetPlans();
            Adapter = new Adapters.Plan(mContext, plansList);
            listView.Adapter = Adapter;
            listView.ItemClick += (o, e) =>
            {
                Activity.RunOnUiThread(()=> {
                    //plansList = dbr.GetPlans();
                    DialogViewPlan(plansList[e.Position]);
                });
            };
            return view;
        }

        private void DialogViewPlan(ORM.Plan plan)
        {
            if (plan != null)
            {
                FragmentTransaction transaction = Activity.FragmentManager.BeginTransaction();
                Helpers.DialogViewPlan dialog = new Helpers.DialogViewPlan(Activity, plan);
                dialog.Show(transaction, "dialog");
                dialog.OnDelete += delegate
                {

                    Activity.RunOnUiThread(()=> {
                        plansList.Remove(plan);
                        //Adapter = new Adapters.Plan(mContext, plansList);
                        Adapter.NotifyDataSetChanged();
                        //listView.Adapter = Adapter;
                    });

                };
                dialog.OnSave += delegate
                {
                    //Adapter = new Adapters.Plan(mContext, dbr.GetPlans());
                    Adapter.NotifyDataSetChanged();
                    //listView.Adapter = Adapter;
                };
            }
        }
    }
} 

最新更新