5

enter image description hereJak ponownie załadować/odświeżyć fragment, który był już wyświetlany jeden raz?

  • mam 2 Fragment s: My1stFragment i My2ndFragment.
  • Wewnątrz My1stFragment Mam ListView, który jest zapełniany przez bazę danych. Również po kliknięciu przycisku edycji wywołuję 2nd Fragment, aby edytować dane.
  • W 2 Fragment Edytuję kwotę wynagrodzenia i aktualizuję bazę danych, klikając przycisk Wyślij i wróć do My1stFragment.
  • Problem polega na tym, że wracam do My1stFragment, moja ListView nie jest aktualizowana, mimo że baza danych została zaktualizowana.
+0

używasz ładowarka kursora? – Raghunandan

+0

Otrzymuję dane, ale nie mogę odświeżyć widoku listy. –

Odpowiedz

2

Wyprowadź swoją klasę PagerAdapter jak

public static class MyPagerAdapter extends FragmentStatePagerAdapter 

zamiast

public static class MyPagerAdapter extends FragmentPagerAdapter 

Zasadniczo FragmentPagerAdapter utrzymuje stworzone Fragment S w pamięci, natomiast FragmentStatePagerAdapter niszczy i tworzy je na nowo, ponieważ są one przesunięte w i poza zasięgiem.

dalszych rozważań:

1. upewnij się, że nie są nazywając setRetainInstance(true) w dowolnych Fragment s, inaczej nie będą odświeżane/aktualizowane.

2. Dodaj

viewPager.setOffscreenPageLimit(0); 

do kodu. Dzięki temu odtwarzane są sąsiednie Fragment s.

3. Zamiast

Activity -> ViewPager -> Fragments 

tworzyć strukturę jak

Activity -> Fragment -> ViewPager -> Nested Fragments 

Zapewni to, że każdy Fragment jest odświeżany na stronie machnięcia. Zobacz this post dla implementacji.

EDIT:

Jak wspomniano w komentarzach poniżej, punkt 2 jest zbędny. Zatem tylko punkty 1 i 3 są w tym przypadku użyteczne.

+0

na pewno drugi punkt? https://code.google.com/p/android/issues/detail?id=56667#c3. Domyślnie jest to 1 !. – Raghunandan

+0

świetny punkt, bardzo dobrze :) Przypuszczam, że druga rekomendacja jest zbędna, ponieważ minimalna jest wewnętrznie ustawiona na 1. –

+0

@ Y.S Dzięki za pomoc w jej łatwym zrozumieniu i wdrożeniu również polecam ten prosty, łatwy i dobry. –

4

Dodaj następujący w 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 
    } 
} 

Teraz kiedy chcesz przyjść do pierwszego fragmentu z drugim fragmentem, przeznaczenie:

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

dzięki też próbowałem tego. to działa. –

+0

@RamMansawala Pleasure :) – DancingMonkeyOnLaughingBuffalo

Powiązane problemy