Wenn ich eine Aktivität starte, die Viewpager implementiert, hat der Viewpager verschiedene Fragmente erstellt. Ich möchte für jedes Fragment unterschiedliche Layouts verwenden, aber das Problem ist, dass der Viewpager maximal zwei Layouts anzeigt (zweites Layout für alle verbleibenden Fragmente nach 1).
Hier ist der Code für SwipeActivity, der den Viewpager implementiert:
public class SwipeActivity extends FragmentActivity
{
MyPageAdapter pageAdapter;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_swipe);
pageAdapter = new MyPageAdapter(getSupportFragmentManager());
ViewPager pager=(ViewPager)findViewById(R.id.pager);
pager.setAdapter(pageAdapter);
ActionBar bar = getActionBar();
bar.setDisplayHomeAsUpEnabled(true);
}
/**
* Custom Page adapter
*/
private class MyPageAdapter extends FragmentPagerAdapter
{
public MyPageAdapter(FragmentManager fm)
{
super(fm);
}
@Override
public int getCount()
{
return 5;
}
@Override
public Fragment getItem(int position)
{
switch(position)
{
case 0: return new MyFragment();
case 1: return SecondFragment.newInstance("asdasd");
default : return RamFragment.newInstance("s");
}
}
}
}
Hier ist der Code für die Fragmente
public class MyFragment extends Fragment
{
@Override
public View onCreateView(LayoutInflater paramLayoutInflater, ViewGroup paramViewGroup, Bundle paramBundle)
{
return paramLayoutInflater.inflate(R.layout.processorlayout, paramViewGroup, false);
}
}
Ich habe 5 Fragmente wie dieses verwendet, die alle unterschiedliche Layouts haben, aber der Viewpager zeigt maximal 2 an.
EDIT : Code für SecondFragment
public class SecondFragment extends Fragment
{
public static final String EXTRA_MESSAGE = "EXTRA_MESSAGE";
public static final SecondFragment newInstance(String paramString)
{
SecondFragment f = new SecondFragment();
Bundle localBundle = new Bundle(1);
localBundle.putString("EXTRA_MESSAGE", paramString);
f.setArguments(localBundle);
return f;
}
@Override
public View onCreateView(LayoutInflater paramLayoutInflater, ViewGroup paramViewGroup, Bundle paramBundle)
{
return paramLayoutInflater.inflate(R.layout.motherboardlayout, paramViewGroup, false);
}
}
Antworten:
Da dies eine sehr häufig gestellte Frage ist, wollte ich mir die Zeit und Mühe nehmen, den ViewPager mit mehreren Fragmenten und Layouts im Detail zu erklären. Bitte schön.
ViewPager mit mehreren Fragmenten und Layoutdateien - Gewusst wie
In diesem Fall habe ich 3 Fragmentklassen und eine andere Layoutdatei für jede Klasse. Um die Dinge einfach zu halten, unterscheiden sich die Fragment-Layouts nur in ihrer Hintergrundfarbe . Natürlich kann jede Layoutdatei für die Fragmente verwendet werden.
FirstFragment.java hat ein orangefarbenes Hintergrundlayout, SecondFragment.java hat ein grünes Hintergrundlayout und ThirdFragment.java hat ein rotes Hintergrundlayout. Darüber hinaus zeigt jedes Fragment einen anderen Text an, je nachdem, aus welcher Klasse es stammt und aus welcher Instanz es stammt.
MainActivity.java (Initialisiert den Viewpager und verfügt über den Adapter als innere Klasse). Schauen Sie sich noch einmal die Importe an . Ich benutze das
android.support.v4
Paket.activity_main.xml (Die .xml-Datei von MainActivitys) - eine einfache Layoutdatei, die nur den ViewPager enthält, der den gesamten Bildschirm ausfüllt.
Die Fragmentklassen FirstFragment.java importieren android.support.v4.app.Fragment;
first_frag.xml
SecondFragment.java
second_frag.xml
ThirdFragment.java
Third_Frag.xml
Das Endergebnis ist das Folgende:
Der Viewpager enthält 5 Fragmente, Fragmente 1 sind vom Typ FirstFragment und zeigen das Layout first_frag.xml an, Fragment 2 ist vom Typ SecondFragment und zeigt die zweite_frag.xml an, und Fragment 3-5 sind vom Typ ThirdFragment und alle zeigen die dritte_frag.xml an .
Oben sehen Sie die 5 Fragmente, zwischen denen Sie durch Wischen nach links oder rechts wechseln können. Natürlich kann immer nur ein Fragment gleichzeitig angezeigt werden.
Zu guter Letzt:
Verwenden Sie die
newInstance(...)
Methode und dieBundle
zur Übergabe von Parametern, anstatt potenzielle Parameter über den Konstruktor zu übergeben.Auf diese Weise kann der Objektstatus über die Argumente gespeichert werden, wenn er getrennt und erneut angehängt wird. Ähnlich wie
Bundles
anIntents
.quelle
Erstellen Sie ein Array von Ansichten und wenden Sie es an:
container.addView(viewarr[position]);
quelle
Code zum Hinzufügen eines Fragments
Erstellen Sie eine XML-Datei für jedes Fragment, z. B. für Fragment1, verwenden Sie fragment_one.xml als Layoutdatei und verwenden Sie den folgenden Code in der Java-Datei Fragment1.
Später können Sie notwendige Korrekturen vornehmen. Es hat bei mir funktioniert.
quelle
Grundlegendes ViewPager-Beispiel
Diese Antwort ist eine Vereinfachung der Dokumentation , dieses Tutorials und der akzeptierten Antwort . Ziel ist es, die Arbeit
ViewPager
so schnell wie möglich zum Laufen zu bringen . Danach können weitere Änderungen vorgenommen werden.XML
Fügen Sie die XML-Layouts für die Hauptaktivität und für jede Seite (Fragment) hinzu. In unserem Fall verwenden wir nur ein Fragmentlayout. Wenn Sie jedoch unterschiedliche Layouts auf den verschiedenen Seiten haben, erstellen Sie für jedes ein Layout.
activity_main.xml
fragment_one.xml
Code
Dies ist der Code für die Hauptaktivität. Es schließt die
PagerAdapter
undFragmentOne
als innere Klassen ein. Wenn diese zu groß werden oder Sie sie an anderen Orten wiederverwenden, können Sie sie in ihre eigenen Klassen verschieben.Fertig
Wenn Sie die drei oben genannten Dateien kopiert und in Ihr Projekt eingefügt haben, sollten Sie in der Lage sein, die App auszuführen und das Ergebnis in der obigen Animation zu sehen.
Weiter geht's
Mit ViewPagers können Sie einige Dinge tun. Weitere Informationen finden Sie unter den folgenden Links:
quelle
Das ist auch gut so:
quelle
quelle