PagerAdapter与FragmentPagerAdapter
PagerAdapter
官方对于PageAapter的描述:Base class providing the adapter to populate pages inside of a ViewPager. You will most likely want to use a more specific implementation of this, such as FragmentPagerAdapter or FragmentStatePagerAdapter。
而ViewPager。它是google SDk中自带的一个附加包(v4)的一个类,可以用来实现屏幕间的切换。
注意:ViewPager是 v4包中的,所以在布局中使用时,需要写全
android.support.v4.view.ViewPager
PagerAdapter就是ViewPager提供的一个适配器。
- 使用步骤
1.创建一个class,继承自PagerAdapter
2.该Adapter用来适配Viewpage
3.需要重写4个方法
a.getCount(),告诉ViewPager,有多少个View要显示
b.instantiateItem(),该方法两个作用:一、把要被显示的视图加载ViewGroup,二、返回要加载的View
c.isViewFromObject(),用来判断instantiateItem返回的Object与当前的View是否是同一对象
d.destroyItem(),该方法在View被移除时调用
代码如下
class MyPageAdapter extends PagerAdapter {
/*
* 告诉ViewPager,有多少个View要显示
*/
@Override
public int getCount() {
return views.length;
}
/*
* 该方法两个作用:一、把要被显示的视图加载到ViewGroup,二、返回要加载的View
*
* 两个参数:
*
* 参数一:ViewGroup:被加载的View的父布局
*
* 参数二:position:要加载的View在数组或集合中的位置
*/
@Override
public Object instantiateItem(ViewGroup container, int position) {
// 1.加载View到container
container.addView(views[position]);
// 2.返回被加载的视图
return views[position];
}
/*
* 用来判断instantiateItem返回的Object与当前的View是否是同一对象
*/
@Override
public boolean isViewFromObject(View view, Object object) {
// TODO Auto-generated method stub
return view==object;
}
/*
* 该方法在View被移除时调用
*
* 移除对应的View
*
* 三个参数:
*
* 参数一:container:要被移除的View的父布局
*
* 参数二:position:表示要被移除的View在数组或集合中的位置
*
* 参数三:Object:代表的就是要被移除的对象
*/
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
// 不要保留super语句,否则报错:没重写desoryItem
// super.destroyItem(container, position, object);
// 移除指定的View
// container.removeView(views[position]);
container.removeView((View) object);
}
}
FragmentPagerAdapter
FragmentPagerAdapter一般用来处理多 Fragment 页面的横向滑动。
使用步骤
1.创建一个class,继承自FragmentPagerAdapter
2.该Adapter用来适配Fragment与Viewpage
3.重写3个函数,重写构造方法,getItem,getCount
代码如下
public class MyFragmentPageAdapter extends FragmentPagerAdapter {
//需要的数据
List<Fragment> data;
public MyFragmentPageAdapter(FragmentManager fm, List<Fragment> list) {
super(fm);
this.data = list;
}
//返回要加载的Fragemnt
@Override
public Fragment getItem(int position) {
return data.get(position);
}
@Override
public int getCount() {
return data.size();
}
}