जैसा कि यह बहुत बार पूछा जाने वाला प्रश्न है, मैं समय और प्रयास को कई फ्रेगमेंट और लेआउट के साथ ViewPager को विस्तार से बताना चाहता था। हेयर यू गो।
एकाधिक टुकड़े और लेआउट फ़ाइलों के साथ ViewPager - कैसे करें
निम्नलिखित एक अलग टुकड़ा और विभिन्न लेआउट फ़ाइलों के साथ एक ViewPager को लागू करने के लिए कैसे का एक पूरा उदाहरण है।
इस मामले में, मेरे पास 3 फ्रैगमेंट कक्षाएं हैं, और प्रत्येक कक्षा के लिए एक अलग लेआउट फ़ाइल है। चीजों को सरल रखने के लिए, टुकड़े-टुकड़े केवल उनके पृष्ठभूमि के रंग में भिन्न होते हैं । बेशक, किसी भी लेआउट-फ़ाइल का उपयोग फ्रेगमेंट के लिए किया जा सकता है।
FirstFragment.java में एक ऑरेंज बैकग्राउंड लेआउट है, SecondFragment.java में एक ग्रीन बैकग्राउंड लेआउट है और ThirdFragment.java में एक रेड बैकग्राउंड लेआउट है। इसके अलावा, प्रत्येक खंड एक अलग पाठ प्रदर्शित करता है, यह निर्भर करता है कि यह किस वर्ग से है और यह किस उदाहरण से है।
यह भी जान लें कि मैं सपोर्ट-लाइब्रेरी के फ़्रैगमेंट का उपयोग कर रहा हूं:
android.support.v4.app.Fragment
MainActivity.java (प्रारंभिक व्यूपेजर को शुरू करता है और एक आंतरिक वर्ग के रूप में इसके लिए एडेप्टर है)। फिर से आयात पर एक नजर है । मैं android.support.v4
पैकेज का उपयोग कर रहा हूं ।
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 फ़ाइल) - एक साधारण लेआउट फ़ाइल, जिसमें केवल ViewPager शामिल है जो पूरे स्क्रीन को भरता है।
<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"
/>
फ्रैगमेंट क्लासेस, FirstFragment.java
इंपोर्ट 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>
अंतिम परिणाम निम्नलिखित है:
Viewpager में 5 फ़्रैगमेंट होते हैं, फ़्रैगमेंट 1 प्रकार का फ़र्स्टग्रैगमेंट होता है, और फर्स्ट_फ्रैग.xml लेआउट प्रदर्शित करता है, फ़्रेग्मेंट 2 टाइप सेकंडग्रैगमेंट का होता है और दूसरा_फ्रैग.xml प्रदर्शित करता है, और फ़्रेग्मेंट 3-5 प्रकार का होता है थर्ड फ़्रेग्मेंट और सभी प्रदर्शित होते हैं third_frag.xml ।
ऊपर आप 5 फ़्रैगमेंट देख सकते हैं जिनके बीच में स्वाइप के माध्यम से बाईं या दाईं ओर स्विच किया जा सकता है। पाठ्यक्रम के एक ही समय में केवल एक टुकड़ा प्रदर्शित किया जा सकता है।
अंतिम पर कम नहीं:
मैं आपको सलाह दूंगा कि आप अपने प्रत्येक Fragment Classes में एक खाली कंस्ट्रक्टर का उपयोग करें।
निर्माता के माध्यम से संभावित मापदंडों को सौंपने के बजाय, newInstance(...)
विधि और Bundle
मापदंडों को सौंपने के लिए उपयोग करें ।
इस तरह से यदि अलग किया गया और ऑब्जेक्ट स्टेट को पुन: संलग्न किया जाता है तो उसे तर्कों के माध्यम से संग्रहीत किया जा सकता है। बहुत कुछ Bundles
संलग्न है Intents
।