Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.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# 如何更新列表视图?_C#_Android_Listview_Android Fragments - Fatal编程技术网

C# 如何更新列表视图?

C# 如何更新列表视图?,c#,android,listview,android-fragments,C#,Android,Listview,Android Fragments,嗨,伙计们,我有个问题。我有一个DialogFragment,其中的内容保存在手机上的sqlite db中,还有一个片段检索并显示信息。ListView最初(在创建时)显示了它应该显示的一切,但是当在对话框片段中更新内容时,我不知道如何更新ListView的适配器。这是我的密码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using Android.App; usi

嗨,伙计们,我有个问题。我有一个DialogFragment,其中的内容保存在手机上的sqlite db中,还有一个片段检索并显示信息。ListView最初(在创建时)显示了它应该显示的一切,但是当在对话框片段中更新内容时,我不知道如何更新ListView的适配器。这是我的密码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Util;
using Android.Views;
using Android.Widget;

namespace Zrelya.Fragments
{
    public class OnSelectedEventArgs : EventArgs
    {
        public ORM.Plan Plan { get; set; }

        public OnSelectedEventArgs( ORM.Plan plan )
        {
            Plan = plan;
        }
    }

    public class ViewPlans : FragmentSuper
    {
        private Context mContext;
        private ORM.DBRep dbr;

        public EventHandler<OnSelectedEventArgs> OnSelected;

        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);
            var listView = view.FindViewById<ListView>(Resource.Id.listView);


            List<ORM.Plan> plansList = dbr.GetPlans();
            Adapters.Plan adapter = new Adapters.Plan(mContext, plansList);
            listView.Adapter = adapter;

            listView.ItemClick += (o, e) =>
            {
                int id = plansList[e.Position].Id;

                OnSelected.Invoke(this, new OnSelectedEventArgs(plansList[e.Position]));
            };

            return view;
        }
    }
}
…DialogViewPlan方法如下所示:

private void DialogViewPlan(ORM.Plan plan)
{
    if (plan != null)
    {
        Android.App.FragmentTransaction transaction = FragmentManager.BeginTransaction();
        Helpers.DialogViewPlan dialog = new Helpers.DialogViewPlan(this, plan);
        dialog.Show(transaction, "dialog");
        dialog.OnDelete += delegate
        {
            Toast.MakeText(this, "Plan deleted...", ToastLength.Short).Show();
        };
        dialog.OnSave += delegate
        {
            Toast.MakeText(this, "Plan saved!", ToastLength.Short).Show();
        };

    }
}
我不知道如何在活动、片段和对话片段之间进行对话,有人知道怎么做吗?

我找到了一个答案:

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 OnSelectedEventArgs : EventArgs
    {
        public ORM.Plan Plan { get; set; }

        public OnSelectedEventArgs( ORM.Plan plan )
        {
            Plan = plan;
        }
    }

    public class ViewPlans : FragmentSuper
    {
        private Context mContext;
        private ORM.DBRep dbr;

        private static Adapters.Plan Adapter;
        private static ListView listView;

        public EventHandler<OnSelectedEventArgs> OnSelected;

        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);


            List<ORM.Plan> plansList = dbr.GetPlans();
            Adapter = new Adapters.Plan(mContext, plansList);


            listView.Adapter = Adapter;


            listView.ItemClick += (o, e) =>
            {
                int id = plansList[e.Position].Id;

                var plan = plansList[e.Position];

                DialogViewPlan(plan);
            };

            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
                {
                    Adapter = new Adapters.Plan(mContext, dbr.GetPlans());
                    listView.Adapter = Adapter;
                };
                dialog.OnSave += delegate
                {
                    Adapter = new Adapters.Plan(mContext, dbr.GetPlans());
                    listView.Adapter = Adapter;
                };

            }
        }
    }
}
使用Android.App;
使用Android.Content;
使用Android.OS;
使用Android.Views;
使用Android.Widget;
使用制度;
使用System.Collections.Generic;
命名空间Zrelya.Fragments
{
在SelectedEventArgs上的公共类:EventArgs
{
公共ORM.Plan计划{get;set;}
公共选举目标(格式图)
{
计划=计划;
}
}
公共类视图平面:FragmentSuper
{
私有上下文;
私有ORM.DBRep dbr;
私有静态适配器;
私有静态ListView ListView;
公开选举;
公共视图平面(上下文)
{
mContext=上下文;
}
创建时公共覆盖无效(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
//在这里创建你的片段
dbr=新的ORM.DBRep();
}
创建视图上的公共覆盖视图(布局、充气机、视图组容器、捆绑包保存状态)
{
//使用此选项可返回此片段的自定义视图
var视图=充气机。充气(Resource.Layout.ViewPlans,container,false);
listView=view.FindViewById(Resource.Id.listView);
List plansList=dbr.GetPlans();
适配器=新适配器。计划(mContext,plansList);
Adapter=适配器;
listView.ItemClick+=(o,e)=>
{
int id=plansList[e.Position].id;
var计划=计划列表[e.位置];
对话框视图平面(平面);
};
返回视图;
}
私有无效对话框ViewPlan(ORM.Plan)
{
如果(计划!=null)
{
FragmentTransaction=Activity.FragmentManager.BeginTransaction();
Helpers.DialogViewPlan dialog=新建Helpers.DialogViewPlan(活动,计划);
dialog.Show(事务,“dialog”);
dialog.OnDelete+=委托
{
Adapter=newadapters.Plan(mContext,dbr.GetPlans());
Adapter=适配器;
};
dialog.OnSave+=委托
{
Adapter=newadapters.Plan(mContext,dbr.GetPlans());
Adapter=适配器;
};
}
}
}
}

NotifyDataSetChanged()
应该刷新您的ListView我在哪里调用此方法?这是适配器类方法,如果您有适配器类的实例,您可以在执行保存和取消对话框的位置调用它,例如
myAdapter.NotifyDataSetChanged()-,
,因为适配器在一个片段中,而保存在对话框片段中
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 OnSelectedEventArgs : EventArgs
    {
        public ORM.Plan Plan { get; set; }

        public OnSelectedEventArgs( ORM.Plan plan )
        {
            Plan = plan;
        }
    }

    public class ViewPlans : FragmentSuper
    {
        private Context mContext;
        private ORM.DBRep dbr;

        private static Adapters.Plan Adapter;
        private static ListView listView;

        public EventHandler<OnSelectedEventArgs> OnSelected;

        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);


            List<ORM.Plan> plansList = dbr.GetPlans();
            Adapter = new Adapters.Plan(mContext, plansList);


            listView.Adapter = Adapter;


            listView.ItemClick += (o, e) =>
            {
                int id = plansList[e.Position].Id;

                var plan = plansList[e.Position];

                DialogViewPlan(plan);
            };

            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
                {
                    Adapter = new Adapters.Plan(mContext, dbr.GetPlans());
                    listView.Adapter = Adapter;
                };
                dialog.OnSave += delegate
                {
                    Adapter = new Adapters.Plan(mContext, dbr.GetPlans());
                    listView.Adapter = Adapter;
                };

            }
        }
    }
}