1. 程式人生 > >ViewPager和ViewPager+Fragment簡單使用

ViewPager和ViewPager+Fragment簡單使用

ViewPager是support v4包中的頁面切換檢視,使用時需要匯入support.v4的包
xml:宣告

    //layout中宣告
    <android.support.v4.view.ViewPager
        android:id="@+id/m_pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    //java:配置和多個view的關係需要使用PagerAdapter
    初始化:
    ViewPager mPager = (ViewPager) findViewById(R.id.m_pager);

    //定義需要的頁面
    List<View> list = new ArrayList<View>();
    ...
list.add(v1); list.add(v2);
定義需要的Adapter介面卡
    class MyPagerAdapter extends PagerAdapter {
        private List<View> list;

        MyPagerAdapter(List<View> list) {
            this.list = list;
        }

        // 配置多少個頁面
        @Override
        public int getCount() {
            return
null == list ? 0 : list.size(); } @Override public boolean isViewFromObject(View v, Object obj) { return v == obj; } // 檢視移除緩衝區時觸發 @Override public void destroyItem(ViewGroup container, int position, Object object) { //獲取要移除的檢視物件
View v = list.get(position); container.removeView(v); } // 檢視進入緩衝區時觸發 @Override public Object instantiateItem(ViewGroup container, int position) { View v = list.get(position); // 將進入緩衝區的檢視物件,新增到容器 container.addView(v); return v; } }

設定介面卡

MyPagerAdapter adapter = new MyPagerAdapter(list);
    //設定介面卡
    mPager.setAdapter(adapter);
ViewPager頁面滑動監聽,需要使用OnPageChangeListener物件來監聽
// ViewPager的監聽
private ViewPager.OnPageChangeListener pageChange = 
new ViewPager.OnPageChangeListener() {

    // 頁面選中
    @Override
    public void onPageSelected(int position) {
        Log.e("m_tag", "onPageSelected:" + position);
    }

    // 介面滑動中(position表示滑動中第一個介面的下標,offset表示第一個介面在螢幕外的比例0-1,
    第三個引數表示在螢幕外的畫素值)
    @Override
    public void onPageScrolled(int position, float offset,
            int offsetInPixels) {
        Log.e("m_tag", "onPageScrolled:" + position + " " + offset + " "
                + offsetInPixels);
    }

    // 滑動的狀態
    @Override
    public void onPageScrollStateChanged(int state) {
        Log.e("m_tag", "onPageScrollStateChanged:" + state);
    }
};

設定監聽

mPager.setOnPageChangeListener(pageChange);

設定選中的位置

mPager.setCurrentItem(index);

ViewPager+Fragment

ViewPager+Fragment 主要區別在於adapter之間的不同
FragmentPagerAdapter或者FragmentStatePagerAdapter,可以幫助ViewPager管理多個Fragment的切換。
    public class MyPagerAdapter extends FragmentPagerAdapter {
    private Fragment[] fragments;

    public MyPagerAdapter(FragmentManager fm, Fragment[] fragments) {
        super(fm);
        this.fragments = fragments;
    }

    @Override
    public Fragment getItem(int position) {
        return fragments[position];
    }

    @Override
    public int getCount() {
        return null == fragments ? 0 : fragments.length;
        }
    }