Sliding Menu Demos 浅析:ViewPager
ViewPager:实现向左滑动页面颜色切换的功能。
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