简体   繁体   English

如何更新ListView?

[英]How do I update a ListView?

Hi guys I have a problem. 嗨,我有问题。 I have a DialogFragment with content that is saved in a sqlite db on the phone, and a Fragment that retrieves the information and shows it. 我有一个DialogFragment,其内容保存在手机的sqlite数据库中,还有一个Fragment,用于检索信息并显示信息。 The ListView initially (upon creation) shows everything like its supposed to, but when the stuff is updated inside the Dialog Fragment, I dont know how to update the adapter for ListView. ListView最初(在创建时)显示了应有的一切,但是当在Dialog Fragment中更新内容时,我不知道如何为ListView更新适配器。 Here is my code: 这是我的代码:

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

OnSelected.Invoke is what happens when an item is clicked, showing the dialog fragment. 单击项目时将发生OnSelected.Invoke,显示对话框片段。 The following code is a snippet from MainActivity OnCreate method: 以下代码是MainActivity OnCreate方法的摘录:

    fragmentViewPlans.OnSelected += (o, e) =>
    {
        int id = e.Plan.Id;
        DialogViewPlan(e.Plan);
    };

...and the DialogViewPlan method is below: ...而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();
        };

    }
}

I dont know how to talk between activity, fragment and dialog fragment, does anyone know how to do this? 我不知道如何在活动,片段和对话框片段之间进行交谈,有人知道该怎么做吗?

I found an answer: 我找到了答案:

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

            }
        }
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM