Sliding Menu Demos 浅析:ViewPager

ViewPager:实现向左滑动页面颜色切换的功能。

360手机助手截图0807_12_12_01360手机助手截图0807_12_12_02360手机助手截图0807_12_12_03 360手机助手截图0807_12_12_04 360手机助手截图0807_12_13_01 360手机助手截图0807_12_13_02


ViewPager同样继承了BaseActivity,所以它同样需要定义Above view。

public class ViewPagerActivity extends BaseActivity

定义自己的Above View:

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        ViewPager vp = new ViewPager(this);  
        vp.setId("VP".hashCode());
        vp.setAdapter(new ColorPagerAdapter(getSupportFragmentManager()));
        setContentView(vp);

        vp.setOnPageChangeListener(new OnPageChangeListener() {
            @Override
            public void onPageScrollStateChanged(int arg0) { }

            @Override
            public void onPageScrolled(int arg0, float arg1, int arg2) { }

            @Override
            public void onPageSelected(int position) {
                switch (position) {
                case 0:
                    getSlidingMenu().setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
                    break;
                default:
                    getSlidingMenu().setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN);
                    break;
                }
            }

        });
        
        vp.setCurrentItem(0);
        getSlidingMenu().setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
    }

ViewPager类:

public class android.support.v4.view.ViewPager extends android.view.ViewGroup

它继承了ViewGroup,所以它具备ViewGroup的特性。即能够添加多个View,并能够进行View切换。      

参考:http://bbs.csdn.net/topics/370144745

vp.setAdapter(new ColorPagerAdapter(getSupportFragmentManager()));

该语句的含义就是将多个Fragment放入到ViewPager中。ColorPagerAdapter类的定义如下:

public class ColorPagerAdapter extends FragmentPagerAdapter {
        
        private ArrayList<Fragment> mFragments;

        private final int[] COLORS = new int[] {
            R.color.red,
            R.color.green,
            R.color.blue,
            R.color.white,
            R.color.black
        };
        
        public ColorPagerAdapter(FragmentManager fm) {
            super(fm);
            mFragments = new ArrayList<Fragment>();
            for (int color : COLORS)
                mFragments.add(new ColorFragment(color));
        }

        @Override
        public int getCount() {
            return mFragments.size();
        }

        @Override
        public Fragment getItem(int position) {
            return mFragments.get(position);
        }

    }

FragmentPagerAdapter:

FragmentPagerAdapter是PagerAdapter其中的一种实现。它将每一个页面表示为一个 Fragment,并且每一个Fragment都将会保存到fragment manager当中。而且,当用户没可能再次回到页面的时候,fragment manager才会将这个Fragment销毁。

这种pager十分适用于有一些静态fragment,例如一组tabs,的时候使用。每个页面对应的Fragment当用户可以访问的时候会一直存在内存中,但是,当这个页面不可见的时候,view hierarchy将会被销毁。这样子会导致应用程序占有太多资源。当页面数量比较大的时候,建议使用FragmentStatePagerAdapter

当使用FragmentPagerAdapter的时候,ViewPager一定要使用正确的ID set。

FragmentPagerAdapter的子类只要实现 getItem(int)getCount()方法。

mFragments.add(new ColorFragment(color));

ColorFragment类继承了Fragment:

public class ColorFragment extends Fragment {
    
    private int mColorRes = -1;
    
    public ColorFragment() { 
        this(R.color.white);
    }
    
    public ColorFragment(int colorRes) {
        mColorRes = colorRes;
        setRetainInstance(true);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        if (savedInstanceState != null)
            mColorRes = savedInstanceState.getInt("mColorRes");
        int color = getResources().getColor(mColorRes);
        // construct the RelativeLayout
        RelativeLayout v = new RelativeLayout(getActivity());
        v.setBackgroundColor(color);//主要是设置背景,里面其实没有内容        
        return v;
    }
    
    @Override
    //当某个activity变得“容易”被系统销毁时,该activity的onSaveInstanceState就会被执行,
    //除非该activity是被用户主动销毁的,例如当用户按BACK键的时候。
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putInt("mColorRes", mColorRes);
    }
    
}
setRetainInstance(true):方法可以有效的提高系统的运行效率,对流畅性要求较高的应用可以适当采用此方法进行设置。
关于Fragment方面的知识可以参考:http://blog.csdn.net/weihan1314/article/details/7997421
posted @ 2015-08-07 13:38  黑泡man  阅读(148)  评论(0编辑  收藏  举报