2017-03-20 11 views
0

Ich habe eine grundlegende PagerAdapter:Ein PagerAdapter für mehrere Fragmente

public class PagerAdapter extends FragmentStatePagerAdapter { 
int mNumOfTabs; 

private final List<Fragment> mFragmentList = new ArrayList<>(); 
private final List<String> mFragmentTitleList = new ArrayList<>(); 

public PagerAdapter(FragmentManager fm, int NumOfTabs) { 
    super(fm); 
    this.mNumOfTabs = NumOfTabs; 
} 

public void addFragment(Fragment fragment, String title) { 
    mFragmentList.add(fragment); 
    mFragmentTitleList.add(title); 
} 

public PagerAdapter(FragmentManager manager) { 
    super(manager); 
} 

@Override 
public CharSequence getPageTitle(int position) { 
    return mFragmentTitleList.get(position); 
} 


@Override 
public Fragment getItem(int position) { 

    switch (position) { 
     case 0: 
      Main tab1 = new Main(); 
      return tab1; 
     case 1: 
      Secondary tab2 = new Secondary(); 
      return tab2; 
     case 2: 
      Third tab3 = new Third(); 
      return tab3; 
     default: 
      return null; 
    } 
} 

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

Es perfekt für eine tablayout und 3 Fragmente arbeitet, die in dem viewpager angezeigt werden. Ich habe mehrere gleiche Fragment-Design (gleiche Tabs) über ein paar Fragmente. Ist es möglich, diesen einen PagerAdapter mit mehreren Optionen (Fragmenten) zu verwenden, so müssen nur die Klassen geändert werden, die instanziiert werden. Main tab1 = new Main(); bis SomeOtherClass tab1 = new SomeOtherClass();. Ich habe versucht, dies mit Parametern und Variablen, aber keinen Erfolg.

+0

Ihre Frage ist nicht klar. –

+0

@AbhishekBansal Ich habe mehrere im Grunde die gleichen Fragmente nur mit unterschiedlichen Namen, was ich tun möchte, ist mit einem Pageradter die Fragmente im Viewpager zu steuern. Die angezeigten Fragmente hängen von einer zuvor ausgewählten Option (Schaltfläche) ab. Sie können geändert werden. Zum Beispiel sind die angezeigten Fragmente das nächste Mal A, B und C, wenn die andere Option ausgewählt ist, sind die angezeigten Fragmente D, E und F. Und dies wird alles unter Verwendung eines Pager-Adapters gesteuert. – squash

Antwort

0

In der public Fragment getItem(int position); Methode sollten Sie das Fragment in mFragmentList für die angegebene Position zurückgeben. Etwas wie dieses:

@Override 
public Fragment getItem(int position) { 
    return mFragmentList.get(position); 
} 

Auf diese Weise können Sie diesen Adapter für jedes Fragment verwenden.

Auch die Methode getCount() sollte wie folgt sein:

@Override 
public int getCount() { 
    return mFragmentList!=null ? mFragmentList.size() : 0; 
} 

Um hartcodierten Werte zu vermeiden.

+0

Es funktioniert. Habe an diesem Projekt eine Weile nicht gearbeitet und ich bin ein Neuling bei der Android-Entwicklung, also habe ich vergessen, worum es bei – squash

+0

ging. Ich bin froh, dass es dir geholfen hat. Viel Glück! –

Verwandte Themen