0

Ich habe riesige Daten auf der Datenbank Seite und ich abzufragen Daten mit einem Service im Batch von 50 Zeilen und setzen diese Daten in ViewPager Fragmente. Es funktioniert gut, aber ich muss den Dienst erneut aufrufen, sobald der Benutzer auf Seite 50 angekommen ist und Fragmente mit neuen Daten aktualisieren muss. Momentan rufe ich den Dienst in der override newInstance (string message) -Methode von Android.Support.V4.App.Fragment auf.Wie Sie Fragmente in ViewPager Xamarin laden

Gibt es eine Möglichkeit, Fragmente dynamisch mit neuen Daten in Xamarin Anadroid zu aktualisieren?

+0

'public static MyFragment NewInstance (int playId)' hier ist die gleiche Funktion im Xamarin android Fragment. –

+0

Mike, du hast Recht. Ich habe diese Methode benutzt, um ein neues Fragment zu initiieren. Aber ich suche nach einer Lösung, wenn ich bereits Fragmente im View-Pager habe, wie man es mit einem anderen Param abrufen kann, wenn der Benutzer das 50. Fragment erreicht. – guruitengineer

+0

'fragmentTransaction.Replace (Android.Resource.Id.Content, details);' Aufruf Ersetzen und Commit-Funktion in Fragment-Transaktion mit der gleichen Ressource-ID. es wird das Fragment neu laden. –

Antwort

0

Um das spezifische Viewpager-Fragment zu aktualisieren. Ich denke, Sie müssen die Aktivität nicht neu erstellen oder das Fragment neu erstellen.

Versuchen Sie, das adapter.NotifyDataSetChanged() zu verwenden, um das Fragment zu aktualisieren.

folgen Sie den setps das sepcific viewpager Fragment zu aktualisieren:

1. Erstellen Sie einen Handler

class MyHandler : Handler 
     { 
      public override void HandleMessage(Message msg) 
      { 
       if (msg.What == 1) 
       { 
        mainAdapter.NotifyDataSetChanged(); 
       } 
      } 
     } 

2. Nachrichtens, wenn Sie das 50-Fragment erreichen

class PageChangeListen : Java.Lang.Object, IOnPageChangeListener 
     { 
      public void OnPageScrolled(int position, float positionOffset, int positionOffsetPixels) 
      { 

      } 

      public void OnPageScrollStateChanged(int state) 
      { 

      } 

      public void OnPageSelected(int position) 
      { 
       if (position == 1) 
       { 
        Message msg = new Message(); 
        msg.What = 1; 
        new MyHandler().SendMessage(msg); 
       } 
      } 
     } 

3. Im Haupt-Thread werden Sie empfangen die Nachricht Ived und rufen NotifyDataSetChanged

4. das Update-Schnittstelle für das Fragment

public interface Updateable 
    { 
     void update(); 
    } 


    public class MyFragment : Android.Support.V4.App.Fragment, Updateable 
    { 

     TextView questionBox; 
     public MyFragment() { } 

     public static MyFragment NewInstance(String question) 
     { 
      MyFragment fragment = new MyFragment(); 
      return fragment; 
     } 
     public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
     { 
      View view = inflater.Inflate(Resource.Layout.MyFragmentLayout, container, false); 
      questionBox = (TextView)view.FindViewById(Resource.Id.textView1); 
      return view; 
     } 

     public void update() 
     { 
      questionBox.Text = "Mike Update"; 
     } 
    } 

5. Fragment durch Aufruf der Benutzeroberfläche hinzufügen, aktualisiert GetItemPosition.

 public override int GetItemPosition(Object @object) 
      { 
       MyFragment f = (MyFragment)@object; 
       System.Console.WriteLine(f.Id + "" + f.Resources + "" + f.Tag); 
       if (f != null) 
       { 
        f.update(); 
       } 
       return base.GetItemPosition(@object); 
      } 

In meinem Beispiel habe ich die zweite Seite mit dem Text "Mike Update" aktualisieren. Sie können die Update-Bedingung und den Inhalt ändern.

Bildschirmfoto:

enter image description here

Die git source code is here

+0

Danke Mike, ich habe das gesucht. Es ist sehr hilfreich. – guruitengineer

+0

Hallo Mike, es funktioniert und ich kann neue Daten vom Dienst laden. Aber Fragmente werden nicht aufgefrischt. Kannst du mir bitte Helfen. – guruitengineer

+0

Verwenden Sie den Handler. Senden einer neuen Nachricht, wenn Sie das Fragment aktualisieren –