Android中ViewPager使用FragmentPagerAdapter(底部圆点)
上一篇http://blog.csdn.net/tibib/article/details/8753769简单的介绍了下ViewPager的使用,上一次使用的是PagerAdapter来生成适配每一页,但最常用的是 FragmentPagerAdapter, FragmentStatePagerAdapter,FragmentPagerAdapter, and FragmentStatePagerAdapter 这几种适配器,分别在API 4+ Support 和API 13+ Support 上提供。效果图如下:
使用Fragment 来表示一页,显得更加简单和直观,Fragment 本身提供的一些特性可以让我们方便的对每一页进行管理,使用FragmentManager可以根据ID或TAG来查找Fragment , 动态添加、删除、替换,Fragment 可以管理自己的生命周期,像Activity一样提供了一些生命周期回调方法。
让Fragment 成为ViewPager的一页时,FragmentManager会一直保存管理创建好了的Fragment,即使当前不是显示的这一页,Fragment对象也不会被销毁,在后台默默等待重新显示。但如果Fragment不再可见时,它的视图层次会被销毁掉,下次显示时视图会重新创建。
出于使用FragmentPagerAdapter 时,Fragment对象会一直存留在内存中,所以当有大量的显示页时,就不适合用FragmentPagerAdapter 了,FragmentPagerAdapter 适用于只有少数的page情况,像选项卡。这个时候你可以考虑使用FragmentStatePagerAdapter
最后一点要注意,当使用FragmentPagerAdapter 时一定要为它的宿主ViewPager设置一个有效的ID !
下面是一个使用FragmentPagerAdapter 的示例,需要注意的是destroyItem()方法并不是去Destroy Fragment对象 而是Destroy的是Fragment的视图 , 这一点需要理解注意了
public class MyPageFragment extends Fragment {public static final String ARG_PAGE = "page_num";// 当前页private int currentPageNum;public MyPageFragment() {}public static MyPageFragment create(int pagerNum) {MyPageFragment myPageFrament = new MyPageFragment();Bundle arg = new Bundle();arg.putInt(ARG_PAGE, pagerNum);myPageFrament.setArguments(arg);return myPageFrament;}/* (non-Javadoc) * @see android.support.v4.app.Fragment#onCreate(android.os.Bundle) * * Fragment创建的时候调用 * */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);Log.i("INFO", "onCreate..");currentPageNum = getArguments().getInt(ARG_PAGE);}/* (non-Javadoc) * @see android.support.v4.app.Fragment#onCreateView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle) * * Fragment从不可见到可见时调用 * */@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {Log.i("INFO", "onCreateView..");ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.per_pager1,container, false);switch (currentPageNum) {case 0:rootView.setBackgroundResource(R.drawable.page1_bg);break;case 1:rootView.setBackgroundResource(R.drawable.page2_bg);break;case 2:rootView.setBackgroundResource(R.drawable.page3_bg);break;default:break;}return rootView;}@Overridepublic void onPause() {super.onPause();}@Overridepublic void onDestroy() {super.onDestroy();Log.i("INFO", "MyFragment Destroy...");}}ViewPager的使用跟上一篇介绍的是一样的,这里就不介绍了,FragmentPagerAdapter的使用也挺简单的,关键是要明白它的含义和使用场景~
