Kiedy rozpoczynam działanie, które implementuje viewpager, viewpager tworzył różne fragmenty. Chcę używać różnych układów dla każdego fragmentu, ale problem polega na tym, że przeglądarka pokazuje maksymalnie dwa układy na maksimum (drugi układ na wszystkich pozostałych fragmentach po 1).
Oto kod SwipeActivity, który implementuje przeglądarkę:
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");
}
}
}
}
Oto kod fragmentów
public class MyFragment extends Fragment
{
@Override
public View onCreateView(LayoutInflater paramLayoutInflater, ViewGroup paramViewGroup, Bundle paramBundle)
{
return paramLayoutInflater.inflate(R.layout.processorlayout, paramViewGroup, false);
}
}
Użyłem 5 takich fragmentów, wszystkie o różnych układach, ale przeglądarka pokazuje tylko 2 maksymalnie.
EDYCJA : kod dla 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);
}
}
Odpowiedzi:
Ponieważ jest to bardzo często zadawane pytanie, chciałem poświęcić trochę czasu i wysiłku, aby wyjaśnić ViewPager szczegółowo wieloma fragmentami i układami. Proszę bardzo.
ViewPager z wieloma fragmentami i plikami układów - jak to zrobić
W tym przypadku mam 3 klasy fragmentów i inny plik układu dla każdej klasy. W celu uproszczenia układy fragmentów różnią się jedynie kolorem tła . Oczywiście do Fragmentów można użyć dowolnego pliku układu.
FirstFragment.java ma pomarańczowy układ tła, SecondFragment.java ma zielony układ tła, a ThirdFragment.java ma czerwony układ tła. Ponadto każdy fragment wyświetla inny tekst, w zależności od tego, z której klasy pochodzi i w jakiej instancji jest.
MainActivity.java (Inicjuje Viewpager i ma dla niego adapter jako klasę wewnętrzną). Ponownie spójrz na import . Korzystam z
android.support.v4
pakietu.activity_main.xml (plik .xml MainActivitys) - prosty plik układu, zawierający tylko ViewPager, który wypełnia cały ekran.
Klasy fragmentów, FirstFragment.java import android.support.v4.app.Fragment;
first_frag.xml
SecondFragment.java
second_frag.xml
ThirdFragment.java
Third_frag.xml
Wynik końcowy jest następujący:
Viewpager zawiera 5 Fragmentów, Fragmenty 1 są typu FirstFragment i wyświetla układ first_frag.xml, Fragment 2 jest typu SecondFragment i wyświetla second_frag.xml, a Fragment 3-5 są typu ThirdFragment i wszystkie wyświetlają trzeci_frag.xml .
Powyżej widać 5 fragmentów, między którymi można przełączać przesuwając palcem w lewo lub w prawo. Oczywiście tylko jeden fragment może być wyświetlany jednocześnie.
Nie mniej ważny:
Zamiast przekazywać potencjalne parametry przez konstruktor, użyj
newInstance(...)
metody iBundle
do przekazania parametrów.W ten sposób po odłączeniu i ponownym podłączeniu stan obiektu można zapisać za pomocą argumentów. Podobnie jak
Bundles
przywiązany doIntents
.źródło
Utwórz tablicę widoków i zastosuj ją do:
container.addView(viewarr[position]);
źródło
Kod dodawania fragmentu
Utwórz plik xml dla każdego fragmentu powiedzmy dla Fragment1, użyj fragment_one.xml jako pliku układu, użyj poniższego kodu w pliku Java Fragment1.
Później możesz wprowadzić niezbędne poprawki. To zadziałało dla mnie.
źródło
Podstawowy przykład ViewPager
Ta odpowiedź jest uproszczeniem dokumentacji , tego samouczka i przyjętej odpowiedzi . Jego celem jest
ViewPager
jak najszybsze uruchomienie i uruchomienie. Następnie można wprowadzić dalsze zmiany.XML
Dodaj układy xml dla głównej aktywności i każdej strony (fragmentu). W naszym przypadku używamy tylko jednego układu fragmentów, ale jeśli masz różne układy na różnych stronach, po prostu utwórz po jednym dla każdego z nich.
Activity_main.xml
fragment_one.xml
Kod
To jest kod głównej aktywności. Obejmuje
PagerAdapter
iFragmentOne
jako klasy wewnętrzne. Jeśli będą zbyt duże lub ponownie wykorzystasz je w innych miejscach, możesz przenieść je do osobnych klas.Skończone
Jeśli skopiowałeś i wkleiłeś trzy powyższe pliki do swojego projektu, powinieneś być w stanie uruchomić aplikację i zobaczyć wynik w powyższej animacji.
Dziać się
Jest wiele rzeczy, które możesz zrobić z ViewPagers. Aby rozpocząć, zobacz następujące łącza:
źródło
To też dobrze:
źródło
źródło