android开发之ViewPager

一、ViewPager是什么?
ViewPager的使用,除了用于View切换之外,还可用于Fragment切换。

单独使用Fragment经常会遇到一些问题,比如Fragment切换时,显示和隐藏的Fragment有时候会出现重叠,导致相互之间的UI和事件混乱。结合ViewPager的使用,则可以避免掉大部分的问题。

ViewPager是android扩展包v4包中的类,这个类可以让用户左右切换当前的view
1)ViewPager类直接继承了ViewGroup类,所有它是一个容器类,可以在其中添加其他的view类。
2)ViewPager类需要一个PagerAdapter适配器类给它提供数据。
3)ViewPager经常和Fragment一起使用,并且提供了专门的FragmentPagerAdapter和FragmentStatePagerAdapter类供Fragment中的ViewPager使用。

二、ViewPager的适配器
PagerAdapter和ListView等控件使用一样,需要ViewPager设置PagerAdapter来完成页面和数据的绑定,这个PagerAdapter是一个基类适配器,我们经常用它来实现app引导图。
它的子类有FragmentPagerAdapter和FragmentStatePagerAdapter,这两个子类适配器用于和Fragment一起使用。

1.实现一个最基本的PagerAdapter:

public class AdapterViewpager extends PagerAdapter { 
private List<View> mViewList; 
public AdapterViewpager(List<View> mViewList) {
     this.mViewList = mViewList; 
} 
@Override 
public int getCount() {
//必须实现 
    return mViewList.size(); 
} 
@Override 
public boolean isViewFromObject(View view, Object object) {
//必须实现 
    return view == object; 
} 
@Override 
public Object instantiateItem(ViewGroup container, int position) {
//必须实现,实例化 
    container.addView(mViewList.get(position)); 
    return mViewList.get(position); 
} 
@Override 
public void destroyItem(ViewGroup container, int position, Object object) {
//必须实现,销毁
    container.removeView(mViewList.get(position)); 
} }

2.实现一个最基本的FragmentPagerAdapter:

public class AdapterFragment extends FragmentPagerAdapter { 
private List<Fragment> mFragments; 
public AdapterFragment(FragmentManager fm, List<Fragment> mFragments) { 
    super(fm); 
    this.mFragments = mFragments; 
} 
@Override 
/**
* 获取给定位置对应的Fragment。
*
* @param position 给定的位置
* @return 对应的Fragment
*/
public Fragment getItem(int position) {
//必须实现 
    return mFragments.get(position); 
} 
@Override 
public int getCount() {
//必须实现 
    return mFragments.size(); 
} 
@Override 
public CharSequence getPageTitle(int position) {
//选择性实现 
    return mFragments.get(position).getClass().getSimpleName(); 
} }
/**
 * 获取给定位置的项Id,用于生成Fragment名称
 *
 * @param position 给定的位置
 * @return 项Id
 */
public long getItemId(int position) {
//选择实现
        return position;
}

3.FragmentStatePagerAdapter的实现同FragmentPagerAdapter

三个适配器之间的区别:
PagerAdapter是基类适配器是一个通用的ViewPager适配器,
相比PagerAdapter,FragmentPagerAdapter和FragmentStatePagerAdapter更专注于每一页是Fragment的情况,而这两个子类适配器使用情况也是有区别的。
FragmentPagerAdapter适用于页面比较少的情况,FragmentStatePagerAdapter适用于页面比较多的情况。

只是摘录了自己需要的部分,节选自两片大神的文章
ViewPager
FragmentPagerAdapter

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值