2012-03-13 13 views
5

Oto mój przypadek użycia:Jak mogę ponownie użyć instancji fragmentu Androida na różnych fragmentach?

muszę utworzyć 3 karty za pomocą ActionBar Navigation Tabs i używam ActionBarSherlock do osiągnięcia tego celu. Każda z 3 kart jest własna Fragment. Istnieje jednak kilka typowych informacji, które są wyświetlane na każdej z kart (w moim przypadku nazwa produktu, opis). Stworzyłem kolejny Fragment dla tej wspólnej informacji i odwołuję się do tego Fragmentu w każdym z głównych układów Fragmentów, takich jak this.

Oto mój problem:

Chcę ponowne wystąpienie fragment, który pobiera i wyświetla wspólny info. Używam poniższego kodu, ale zawsze wydaje się tworzyć nowe wystąpienie wspólnego fragmentu w każdym z głównych fragmentów.

FragmentManager fm = getFragmentManager(); 
    f = (ProductDetailsInfoFragment) fm.findFragmentByTag("prodinfo"); 

    if (f == null) { 
     Log.d(TAG, "fragment not found...creating new instance"); 

     f = new ProductDetailsInfoFragment(); 
     f.setTargetFragment(this, 0); 
     fm.beginTransaction().replace(R.id.prod_info_fragment, f, "prodinfo").commit();   
    } 
+0

Nie można ponownie użyć tej samej instancji Fragmentu, musisz utworzyć nowy, aby użyć go na innym fragmencie. –

+0

Ugh, właśnie tego się bałem. Sądzę, że będę musiał dodać trochę logiki do tego fragmentu, aby buforować, aby nie pobierać danych wiele razy. – Sanjeev

Odpowiedz

2

Możesz udostępniać fragmenty, jeśli chcesz. Będziesz musiał zaimplementować ActionBar.TabListener i w swoim onTabSelected po prostu wybierz fragment, którego chcesz użyć.

Można zrobić coś takiego: https://gist.github.com/anonymous/5415274

lepiej opcja jest do przechowywania danych, które są potrzebne zarówno tych fragmentów w oddzielnym obiektem, który można dzielić między nimi. Umożliwi to przetestowanie pobierania bez konieczności dołączenia do niego interfejsu użytkownika. Pozwala to również na rozbieżność między dwoma fragmentami, czyniąc je czymś pojedynczym, w przeciwieństwie do konieczności przechowywania całego kodu potrzebnego do obu działań w jednym fragmencie.

Powiązane problemy