2017-06-09 4 views
0

Hallo Leute, ich habe ein Problem. Ich habe ein DialogFragment mit Inhalten, die in einer sqlite db auf dem Telefon gespeichert sind, und ein Fragment, das die Informationen abruft und anzeigt. Das ListView zeigt anfangs (nach der Erstellung) alles wie es sein soll, aber wenn das Zeug innerhalb des Dialogfragments aktualisiert wird, weiß ich nicht, wie man den Adapter für ListView aktualisiert. Hier ist mein Code:Wie aktualisiere ich ein 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 ist, was passiert, wenn ein Element geklickt wird, um das Dialog Fragment zeigt. Der folgende Code ist ein Ausschnitt aus MainActivity OnCreate Methode:

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

... und die DialogViewPlan Verfahren sind unter:

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

    } 
} 

Ich weiß nicht, wie zwischen Aktivität, Fragmente und Dialog-Fragmente zu sprechen, tut Weiß jemand, wie man das macht?

+0

'NotifyDataSetChanged()' Ihre Listview – Yupi

+0

aktualisieren sollte, wo ich diese Methode aufrufen, tun? –

+0

Das ist die Adapterklassenmethode. Wenn Sie eine Instanz Ihrer Adapterklasse haben, können Sie sie zum Beispiel 'myAdapter.NotifyDataSetChanged() -,' an der Stelle aufrufen, an der Sie Dialog speichern und verwerfen. – Yupi

Antwort

0

fand ich eine Antwort:

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

      } 
     } 
    } 
} 
Verwandte Themen