Bu çok sık sorulan bir soru olduğundan, ViewPager'i birden fazla Parça ve Düzen ile ayrıntılı olarak açıklamak için zaman ve çaba harcamak istedim. Hadi bakalım.
Birden Fazla Parça ve Düzen dosyası içeren ViewPager - Nasıl Yapılır
Aşağıda, farklı parça Türleri ve farklı düzen dosyalarıyla bir ViewPager'in nasıl uygulanacağının tam bir örneği verilmiştir.
Bu durumda, 3 Fragment sınıfı ve her sınıf için farklı bir düzen dosyası var. İşleri basit tutmak için, parça düzenleri yalnızca arka plan renklerinde farklılık gösterir . Tabii ki, Parçalar için herhangi bir düzen dosyası kullanılabilir.
FirstFragment.java turuncu arka plan düzenine, SecondFragment.java yeşil arka plan düzenine ve ThirdFragment.java kırmızı arka plan düzenine sahiptir. Ayrıca, her Parça hangi sınıftan olduğuna ve hangi örneğe bağlı olduğuna bağlı olarak farklı bir metin görüntüler.
Ayrıca destek kütüphanesinin Fragment'ı kullandığımı da unutmayın:
android.support.v4.app.Fragment
MainActivity.java ( Viewpager'ı başlatır ve bunun için bir iç sınıf olarak adaptöre sahiptir). Yine ithalata bir bakın . android.support.v4
Paketi kullanıyorum .
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
public class MainActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ViewPager pager = (ViewPager) findViewById(R.id.viewPager);
pager.setAdapter(new MyPagerAdapter(getSupportFragmentManager()));
}
private class MyPagerAdapter extends FragmentPagerAdapter {
public MyPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int pos) {
switch(pos) {
case 0: return FirstFragment.newInstance("FirstFragment, Instance 1");
case 1: return SecondFragment.newInstance("SecondFragment, Instance 1");
case 2: return ThirdFragment.newInstance("ThirdFragment, Instance 1");
case 3: return ThirdFragment.newInstance("ThirdFragment, Instance 2");
case 4: return ThirdFragment.newInstance("ThirdFragment, Instance 3");
default: return ThirdFragment.newInstance("ThirdFragment, Default");
}
}
@Override
public int getCount() {
return 5;
}
}
}
activity_main.xml (MainActivitys .xml dosyası) - yalnızca tüm ekranı kaplayan ViewPager'i içeren basit bir düzen dosyası.
<android.support.v4.view.ViewPager
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/viewPager"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
Fragment sınıfları, FirstFragment.java
içe aktarma android.support.v4.app.Fragment;
public class FirstFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.first_frag, container, false);
TextView tv = (TextView) v.findViewById(R.id.tvFragFirst);
tv.setText(getArguments().getString("msg"));
return v;
}
public static FirstFragment newInstance(String text) {
FirstFragment f = new FirstFragment();
Bundle b = new Bundle();
b.putString("msg", text);
f.setArguments(b);
return f;
}
}
first_frag.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/holo_orange_dark" >
<TextView
android:id="@+id/tvFragFirst"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:textSize="26dp"
android:text="TextView" />
</RelativeLayout>
SecondFragment.java
public class SecondFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.second_frag, container, false);
TextView tv = (TextView) v.findViewById(R.id.tvFragSecond);
tv.setText(getArguments().getString("msg"));
return v;
}
public static SecondFragment newInstance(String text) {
SecondFragment f = new SecondFragment();
Bundle b = new Bundle();
b.putString("msg", text);
f.setArguments(b);
return f;
}
}
second_frag.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/holo_green_dark" >
<TextView
android:id="@+id/tvFragSecond"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:textSize="26dp"
android:text="TextView" />
</RelativeLayout>
ThirdFragment.java
public class ThirdFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.third_frag, container, false);
TextView tv = (TextView) v.findViewById(R.id.tvFragThird);
tv.setText(getArguments().getString("msg"));
return v;
}
public static ThirdFragment newInstance(String text) {
ThirdFragment f = new ThirdFragment();
Bundle b = new Bundle();
b.putString("msg", text);
f.setArguments(b);
return f;
}
}
third_frag.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/holo_red_light" >
<TextView
android:id="@+id/tvFragThird"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:textSize="26dp"
android:text="TextView" />
</RelativeLayout>
Sonuç şu şekildedir:
Viewpager 5 Parçayı tutar, Parçacıklar 1 FirstFragment türündedir ve first_frag.xml düzenini görüntüler, Parça 2 SecondFragment türündedir ve second_frag.xml dosyasını görüntüler ve 3-5 Parçası da ThirdFragment türündedir ve hepsi third_frag.xml dosyasını görüntüler .
Yukarıda, sola veya sağa kaydırarak değiştirilebilen 5 Parçayı görebilirsiniz. Elbette aynı anda yalnızca bir Parça görüntülenebilir.
Sonuncu ama bir o kadar önemli:
Fragment sınıflarınızın her birinde boş bir kurucu kullanmanızı öneririm .
Potansiyel parametreleri yapıcı üzerinden teslim etmek yerine, newInstance(...)
yöntemi ve Bundle
parametreleri teslim etmek için kullanın .
Bu şekilde, nesne durumu ayrılır ve yeniden eklenirse bağımsız değişkenler aracılığıyla saklanabilir. Çok Bundles
bağlı gibi Intents
.