2012-11-17 16 views
6

Ist es möglich, ein Fragment in einem Viewpager mehrere Male zu verwenden? Ich versuche eine dynamisch aktualisierte Benutzeroberfläche mit ViewPager zu erstellen. Ich möchte das gleiche Design verwenden, im Grunde das gleiche Fragment mit verschiedenen Daten für jede Seite, wie ein Listview-Adapter.Verwenden Sie ein Fragment in einem ViewPager mehrere Male

+1

AFAIK, das wird nicht funktionieren. Sie können einen 'GestureDetector' verwenden, um nach Swipes in Ihrem vorhandenen Fragment zu suchen. – CommonsWare

+0

BTW, um zu verdeutlichen, nehme ich an, dass Sie meinen, dass Sie ein einzelnes Fragment * instance * verwenden möchten - wenn Sie meinen, dass Sie nur ein einzelnes Fragment * class * verwenden möchten, ist das völlig in Ordnung. – CommonsWare

Antwort

4

Sie können dieselbe Fragmentklasse für jede Seite in Ihrem ViewPager instanziieren, indem Sie die Position des ViewPagers übergeben, um zu steuern, was angezeigt werden soll. So etwas Ähnliches:

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 
     }    
    } 
} 

dann, in Sie 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); 
    } 
} 

diese Weise können Sie die meisten Ihrer Code wiederverwenden können Ändern nur das, was Sie in dem Switch/Case-Anweisung müssen.

+0

aber Sie können nicht einen nicht leeren Konstruktor der Fragmentklasse –

3

Sie missverstanden das Konzept class gegenüber object of class. Ihr MyFragment.java Quellcode definiert class, die Sie verwandeln sich in „Lebewesen“ jedes Mal, wenn Sie es mit new Operator instanziiert (new MyFragment();) - diese object schafft, die ein instance Ihrer class ist. Sofern Sie dies nicht absichtlich verhindern (indem Sie z. B. ein Singleton-Muster verwenden), können Sie so viele instances von class wie Sie möchten, genauso wie Sie so viele Kuchen machen dürfen, die ein einzelnes Rezept verwenden. Und das gilt auch für Fragmente.

So lange, wie Sie erstellen separateobject (sagten instance aka) Ihre class für jede Seite, sollten Sie in der Lage sein zu tun, was Sie wollen.

+0

erstellen können Sie einige Beispiele für die obige Erklärung ..? – Harsha

Verwandte Themen