2017-06-09 12 views
0

こんにちは、私は問題があります。私は電話でsqliteデータベースに保存されているコンテンツを持つDialogFragmentと、情報を取得して表示するFragmentを持っています。 ListViewは、最初に(作成時に)想定されていたようなものを表示しますが、ダイアログフラグメント内で更新されると、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; 
     } 
    } 
} 

OnSelected.Invokeは、アイテムがクリックされたときに、ダイアログの断片を表示します。次のコードは、MainActivityのOnCreateメソッドからの抜粋です:

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

...と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(); 
     }; 

    } 
} 

ん誰もこれを行う方法を知っていますか?

+0

'NotifyDataSetChangedは()'私は、このメソッドを呼び出すか、あなたのListView – Yupi

+0

をリフレッシュする必要がありますか? –

+0

これはアダプタクラスメソッドです。アダプタクラスのインスタンスを持っている場合は、ダイアログの保存と解除を行う場所で、たとえば 'myAdapter.NotifyDataSetChanged() - 'と呼び出すことができます。 – Yupi

答えて

0

私は答えた:

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

      } 
     } 
    } 
} 
関連する問題