5

enter image description hereWie wird ein Fragment, das bereits einmal angezeigt wurde, erneut geladen/aktualisiert?

  • Ich habe 2 Fragment s: My1stFragment und My2ndFragment.
  • Inside My1stFragment Ich habe eine ListView, die von der Datenbank aufgefüllt wird. Auch wenn ich auf Bearbeiten-Schaltfläche klicke, rufe ich 2. Fragment an, um Daten zu bearbeiten.
  • In 2nd Fragment bearbeite ich meinen Gehaltsbetrag und aktualisiere meine Datenbank, indem ich auf Senden klicke und auf My1stFragment zurückkomme.
  • Das Problem ist, wenn ich zurück zu My1stFragment komme, wird meine ListView nicht aktualisiert, obwohl die Datenbank aktualisiert wurde.
+0

werden Sie einen Cursor Loader? – Raghunandan

+0

Ich erhalte Daten, aber ich kann die Listenansicht nicht aktualisieren. –

Antwort

2

leiten Ihre PagerAdapter Klasse als

public static class MyPagerAdapter extends FragmentStatePagerAdapter 

statt

public static class MyPagerAdapter extends FragmentPagerAdapter 

Grundsätzlich hält FragmentPagerAdapter die erstellten Fragment s im Speicher, während FragmentStatePagerAdapter zerstört und schafft sie neu, wie sie in verschoben und außer Sichtweite.

Weitere Überlegungen:

1. Vergewissern Sie sich, nichtsetRetainInstance(true) in einem Ihrer Fragment s nennen, sonst werden sie nicht aktualisiert werden/aktualisiert.

2.

viewPager.setOffscreenPageLimit(0); 

, um Ihren Code hinzufügen. Dadurch wird sichergestellt, dass benachbarte Fragment s neu erstellt werden.

3. Statt

Activity -> ViewPager -> Fragments 

erstellen die Struktur als

Activity -> Fragment -> ViewPager -> Nested Fragments 

Dadurch wird sichergestellt, dass jeder Fragment auf Seite Swipe aktualisiert wird. Siehe this post für die Implementierung.

EDIT:

Wie unten in den Kommentaren diskutiert, Punkt 2 ist redundant. Daher sind in diesem Fall nur die Punkte 1 und 3 nützlich.

+0

sicher der zweite Punkt? https://code.google.com/p/android/issues/detail?id=56667#c3. Standardmäßig ist 1! – Raghunandan

+0

toller Punkt, sehr gut :) Ich nehme an, die zweite Empfehlung ist redundant, wie das Minimum ist intern auf 1 gesetzt. –

+0

@ Y.S Dank für seine Hilfe zu verstehen und zu implementieren auch ich beziehe diese einfach, einfach und gut. –

4

Fügen Sie die folgenden in Ihrem firstFragment:

@Override 
public void setUserVisibleHint(boolean isVisibleToUser){ 
    super.setUserVisibleHint(isVisibleToUser); 
    if (isVisibleToUser) { 
     Log.e("Visible hint","in visibleHint()"); 
     //add your method to set adapter to listview here by passing (getActivity().getApplicationContext()) parameter for context 
    } 
} 

Nun, wenn Sie zum ersten Fragment von anderen Fragment, Verwendung kommen wollen:

((ActivityOfFragment) getActivity())./*viewPager if any.*/setCurrentItem(0/*fragment position*/, true); 
+0

danke ich habe es auch versucht. es funktioniert. –

+0

@RamMansawala Vergnügen :) – DancingMonkeyOnLaughingBuffalo

Verwandte Themen