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