2012-11-17 16 views
6

Czy można wielokrotnie używać jednego fragmentu w przeglądarce stron? Próbuję zbudować dynamicznie aktualizowany interfejs użytkownika przy użyciu ViewPager. Chcę użyć tego samego projektu, w zasadzie ten sam fragment z różnymi danymi dla każdej strony, jak adapter widoku list.Użyj jednego fragmentu w ViewPager wiele razy

+1

AFAIK, to nie zadziała. Możesz użyć 'GestureDetector', aby obejrzeć przeciągnięcia na istniejącym fragmencie. – CommonsWare

+0

BTW, aby wyjaśnić, zakładam, że masz na myśli, że chcesz użyć pojedynczego fragmentu * instancji * - jeśli masz na myśli, że chcesz użyć tylko jednego fragmentu * klasy *, to jest idealnie w porządku. – CommonsWare

Odpowiedz

4

Możesz utworzyć instancję tej samej klasy Fragment dla każdej strony w ViewPager, przekazując pozycję ViewPagera, aby kontrolować, co wyświetlić. Coś takiego:

public class MyFragment extends Fragment { 

    private int mIndex; 

    public MyFragment(int index) { 
     mIndex = index; 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
       Bundle savedInstanceState) { 

     switch(mIndex){ 
      case 0: 
      // do you things.. 
      case 1: 
      // etcetera 
     }    
    } 
} 

wtedy w was FragmentPagerAdapter:

public static class MyAdapter extends FragmentPagerAdapter { 
    public MyAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public int getCount() { 
     return NUM_ITEMS; 
    } 

    @Override 
    public Fragment getItem(int position) { 
     return new MyFragment(position); 
    } 
} 

ten sposób można ponownie wykorzystać większość kodu zmienia tylko to, czego potrzebujesz w rachunku switch/case.

+0

ale nie możesz utworzyć niepustego konstruktora klasy fragmentów –

3

Źle zrozumiałeś koncepcję class versus object of class. Twój MyFragment.java kod źródłowy definiuje class które zamieni się „żyjącym” przy każdym ty instancję go new operatora (new MyFragment();) - tworzy object który jest instance Twojego class. O ile celowo temu nie zapobiegniesz (np. Za pomocą wzorca Singleton), możesz wykonać dowolną liczbę instances z class, w ten sam sposób, w jaki możesz zrobić tyle ciastek, używając pojedynczej receptury. Dotyczy to również fragmentów.

Tak długo, jak utworzyć oddzielnyobject (aka powiedział instance) Twojego class dla każdej strony, powinieneś być w stanie robić to, co chcesz.

+0

czy możesz podać próbkę dla powyższego wyjaśnienia ..? – Harsha

Powiązane problemy