Sliding Menu Demos 浅析:ViewPager

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

360手机助手截图0807_12_12_01   360手机助手截图0807_12_12_02   360手机助手截图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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值