使用片段的基本 ViewPager

ViewPager 允許在活動中顯示多個片段,可以通過向左或向右滑動來導航。ViewPager 需要使用 PagerAdapter 來提供檢視或片段。

然而,在使用片段 FragmentPagerAdapterFragmentStatePagerAdapter 的情況下,你會發現兩個更具體的實現。當片段第一次需要例項化時,將為每個需要例項化的位置呼叫 getItem(position)getCount() 方法將返回總頁數,以便 ViewPager 知道需要顯示多少片段。

FragmentPagerAdapterFragmentStatePagerAdapter 都保留了 ViewPager 需要顯示的片段的快取。預設情況下,ViewPager 將嘗試儲存最多 3 個與當前可見片段對應的片段,以及右側和左側旁邊的片段。此外,FragmentStatePagerAdapter 將保持每個片段的狀態。

請注意,這兩個實現都假設你的片段將保留其位置,因此如果你保留片段列表而不是靜態數量,如 getItem() 方法中所示,你將需要建立 PagerAdapter 的子類並覆蓋至少 instantiateItem()destroyItem()getItemPosition()methods。

只需在佈局中新增 ViewPager,如基本示例中所述

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout> 
    <android.support.v4.view.ViewPager
        android:id="@+id/vpPager"> 
    </android.support.v4.view.ViewPager>
</LinearLayout>

然後定義介面卡,該介面卡將確定存在多少頁面以及為介面卡的每個頁面顯示哪個片段。

public class MyViewPagerActivity extends AppCompatActivity {
    private static final String TAG = MyViewPagerActivity.class.getName();

    private MyPagerAdapter mFragmentAdapter;
    private ViewPager mViewPager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);    
        setContentView(R.layout.myActivityLayout);

        //Apply the Adapter
        mFragmentAdapter = new MyPagerAdapter(getSupportFragmentManager());    
        mViewPager = (ViewPager) findViewById(R.id.view_pager);
        mViewPager.setAdapter(mFragmentAdapter);
    }

    private class MyPagerAdapter extends FragmentPagerAdapter{

        public MyPagerAdapter(FragmentManager supportFragmentManager) {
            super(supportFragmentManager);
        }

        // Returns the fragment to display for that page
        @Override
        public Fragment getItem(int position) {
            switch(position) {
                case 0:
                    return new Fragment1();

                case 1:
                    return new Fragment2();

                case 2:
                    return new Fragment3();

                default:
                    return null;
            }
        }

        // Returns total number of pages    
        @Override
        public int getCount() {
            return 3;
        }

    }
}

Version >= 3.2.x 中

如果你使用 android.app.Fragment,則必須新增此依賴項:

compile 'com.android.support:support-v13:25.3.1'

如果你使用 android.support.v4.app.Fragment,則必須新增此依賴項:

compile 'com.android.support:support-fragment:25.3.1'