Ketika saya memulai aktivitas yang mengimplementasikan viewpager, viewpager membuat berbagai fragmen. Saya ingin menggunakan tata letak yang berbeda untuk setiap fragmen, tetapi masalahnya adalah viewpager hanya menampilkan dua tata letak di max (tata letak kedua pada semua fragmen yang tersisa setelah 1).
Ini adalah kode untuk SwipeActivity yang mengimplementasikan viewpager:
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");
}
}
}
}
Ini adalah kode untuk fragmen
public class MyFragment extends Fragment
{
@Override
public View onCreateView(LayoutInflater paramLayoutInflater, ViewGroup paramViewGroup, Bundle paramBundle)
{
return paramLayoutInflater.inflate(R.layout.processorlayout, paramViewGroup, false);
}
}
Saya menggunakan 5 fragmen seperti ini, semuanya memiliki tata letak yang berbeda, tetapi viewpager hanya menampilkan 2 pada maks.
EDIT : kode untuk 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);
}
}
Jawaban:
Karena ini adalah pertanyaan yang sangat sering diajukan, saya ingin meluangkan waktu dan upaya untuk menjelaskan ViewPager dengan beberapa Fragmen dan Tata Letak secara terperinci. Ini dia
ViewPager dengan beberapa file Fragmen dan Tata Letak - Cara
Dalam hal ini, saya memiliki 3 kelas Fragmen, dan file tata letak yang berbeda untuk setiap kelas. Agar hal-hal sederhana, tata letak fragmen-hanya berbeda dalam warna latar belakang mereka . Tentu saja, setiap file layout dapat digunakan untuk Fragmen.
FirstFragment.java memiliki tata letak latar belakang oranye , SecondFragment.java memiliki tata letak latar belakang hijau dan ThirdFragment.java memiliki tata letak latar belakang merah . Selanjutnya, setiap Fragmen menampilkan teks yang berbeda, tergantung dari kelas mana dan dari mana itu.
MainActivity.java (Menginisialisasi Viewpager dan memiliki adaptor untuknya sebagai kelas dalam). Sekali lagi lihat impor . Saya menggunakan
android.support.v4
paket.activity_main.xml (File MainActivitys .xml) - file tata letak sederhana, hanya berisi ViewPager yang memenuhi seluruh layar.
Kelas Fragmen, FirstFragment.java mengimpor android.support.v4.app.Fragment;
first_frag.xml
SecondFragment.java
second_frag.xml
ThirdFragment.java
third_frag.xml
Hasil akhirnya adalah sebagai berikut:
Viewpager memegang 5 Fragmen, Fragmen 1 bertipe FirstFragment, dan menampilkan tata letak first_frag.xml, Fragmen 2 bertipe SecondFragment dan menampilkan second_frag.xml, dan Fragmen 3-5 bertipe ThirdFragment dan semua menampilkan third_frag.xml .
Di atas Anda dapat melihat 5 Fragmen di antaranya dapat diaktifkan melalui gesek ke kiri atau kanan. Hanya satu Fragmen yang bisa ditampilkan pada saat yang bersamaan tentunya.
Terakhir tapi bukan yang akhir:
Alih-alih menyerahkan parameter potensial melalui konstruktor, gunakan
newInstance(...)
metode danBundle
untuk menyerahkan parameter.Dengan cara ini jika terlepas dan dilampirkan kembali keadaan objek dapat disimpan melalui argumen. Sangat mirip
Bundles
denganIntents
.sumber
Buat larik Tampilan dan terapkan ke:
container.addView(viewarr[position]);
sumber
Kode untuk menambahkan fragmen
Buat file xml untuk setiap fragmen katakanlah untuk Fragment1, gunakan fragment_one.xml sebagai file layout, gunakan kode di bawah ini dalam file java Fragment1.
Kemudian Anda dapat melakukan koreksi yang diperlukan .. Ini berhasil untuk saya.
sumber
Contoh Tampilan Dasar
Jawaban ini adalah penyederhanaan dokumentasi , tutorial ini , dan jawaban yang diterima . Tujuannya adalah untuk mendapatkan kerja
ViewPager
dan berlari secepat mungkin. Pengeditan lebih lanjut dapat dilakukan setelah itu.XML
Tambahkan tata letak xml untuk aktivitas utama dan untuk setiap halaman (fragmen). Dalam kasus kami, kami hanya menggunakan satu tata letak fragmen, tetapi jika Anda memiliki tata letak yang berbeda pada halaman yang berbeda maka cukup buat satu untuk masing-masing.
activity_main.xml
fragment_one.xml
Kode
Ini adalah kode untuk aktivitas utama. Ini termasuk
PagerAdapter
danFragmentOne
sebagai kelas batin. Jika ini terlalu besar atau Anda menggunakannya kembali di tempat lain, maka Anda dapat memindahkannya ke kelas masing-masing.Jadi
Jika Anda menyalin dan menempelkan ketiga file di atas ke proyek Anda, Anda harus dapat menjalankan aplikasi dan melihat hasilnya dalam animasi di atas.
Sedang terjadi
Ada beberapa hal yang dapat Anda lakukan dengan ViewPagers. Lihat tautan berikut untuk memulai:
sumber
Ini juga baik:
sumber
sumber