PageAdapter

PageAdapter——PageView的适配器

四大方法:

PageAdapter 必须重写的四个函数:

  • boolean isViewFromObject(View arg0, Object arg1)
  • int getCount() 
  • void destroyItem(ViewGroup container, int position,Object object)
  • Object instantiateItem(ViewGroup container, int position)
  •  CharSequence getPageTitle(int position) //主要用于标题。看需要
getCount():返回要滑动的VIew的个数
destroyItem():从当前container中删除指定位置(position)的View;
instantiateItem():做了两件事,第一:将当前视图添加到container中,第二:返回当前View
isviewfromobject(ViewGroup, int)函数所返回来的Key与一个页面视图是否是代表的同一个视图(即它俩是否是对应的,对应的表示同一个View)
返回值:如果对应的是同一个View,返回True,否则返回False。
即:表示instantiateItem返回的值,与isViewFromObject中的view是否一样来判断是否为当前界面
如:
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));
    }
}
还可以这样:
  1.  PagerAdapter pagerAdapter = new PagerAdapter() {  
  2.   
  3.             @Override  
  4.             public boolean isViewFromObject(View arg0, Object arg1) {  
  5.                 // TODO Auto-generated method stub  
  6.                 //根据传来的key,找到view,判断与传来的参数View arg0是不是同一个视图  
  7.                 return arg0 == viewList.get((int)Integer.parseInt(arg1.toString()));  
  8.             }  
  9.   
  10.             @Override  
  11.             public int getCount() {  
  12.                 // TODO Auto-generated method stub  
  13.                 return viewList.size();  
  14.             }  
  15.   
  16.             @Override  
  17.             public void destroyItem(ViewGroup container, int position,  
  18.                     Object object) {  
  19.                 // TODO Auto-generated method stub  
  20.                 container.removeView(viewList.get(position));  
  21.             }  
  22.   
  23.             @Override  
  24.             public Object instantiateItem(ViewGroup container, int position) {  
  25.                 // TODO Auto-generated method stub  
  26.                 container.addView(viewList.get(position));  
  27.   
  28.                 //把当前新增视图的位置(position)作为Key传过去  
  29.                 return position;  
  30.             }  
  31.         };  
  32.   
  33.         viewPager.setAdapter(pagerAdapter);  
  34.   
  35.     } 
PagerTabStrip与PagerTitleStrip 用于标题
区别:
只是PagerTabStrip是可交互的,而PagerTitleStrip是不可交互的区别。PagerTabStrip(是可点击与下划线指示条,点击会跳转到对应页面)。

1、XML布局

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent"  
  5.     tools:context="com.example.testviewpage_2.MainActivity" >  
  6.   
  7.     <android.support.v4.view.ViewPager  
  8.         android:id="@+id/viewpager"  
  9.         android:layout_width="wrap_content"  
  10.         android:layout_height="wrap_content"  
  11.         android:layout_gravity="center">  
  12.           
  13.                 <android.support.v4.view.PagerTabStrip  
  14.             android:id="@+id/pagertab"  
  15.             android:layout_width="match_parent"  
  16.             android:layout_height="wrap_content"   
  17.             android:layout_gravity="top"/>  //表示在哪个位置
  18.           
  19.     </android.support.v4.view.ViewPager>  
  20.   
  21. </RelativeLayout>  

FragmentPagerAdapter和 FragmentStatePagerAdapter
public class AdapterFragment extends FragmentPagerAdapter {
    private List<Fragment> mFragments;

    public AdapterFragment(FragmentManager fm, List<Fragment> mFragments) {
        super(fm);
        this.mFragments = mFragments;
    }

    @Override
    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();
    }
}

3个适配器的基本实现讲完了是不是很简单,那他们的区别是什么呢?
PagerAdapter是基类适配器是一个通用的ViewPager适配器,相比PagerAdapter,
FragmentPagerAdapter和FragmentStatePagerAdapter更专注于每一页是Fragment的情况,而这两个子类适配器使用情况也是有区别的。FragmentPagerAdapter,保留了以前的Fragment对象.FragmentPagerAdapter适用于页面比较少的情况,FragmentStatePagerAdapter适用于页面比较多的情况。
mViewPager.setOffscreenPageLimit()/
FragmentStatePagerAdapter和FragmentPagerAdapter都是这样,但是FragmentPagerAdapter设置setOffscreenPageLimit不影响fragment缓存的个数(因为他一直会缓存),而FragmentStatePagerAdapter缓存的fragment实例个数就是setOffscreenPageLimit设置的值+1。另外setOffscreenPageLimit的缺省值是1,设置0是无效的会被强制赋值成1。

ViewPagerIndicator:

 ViewPager pager = (ViewPager)findViewById(R.id.pager);  
        FragmentPagerAdapter adapter = new TabPageIndicatorAdapter(getSupportFragmentManager());  
        pager.setAdapter(adapter);  

        //实例化TabPageIndicator,然后与ViewPager绑在一起(核心步骤)  
        TabPageIndicator indicator = (TabPageIndicator)findViewById(R.id.indicator);  
        indicator.setViewPager(pager);  
注意:
a)  必须在pager设置适配之后调用
b) 必须重写 getPageTitle()方法
  @Override  
        public CharSequence getPageTitle(int position) {  
            return TITLE[position % TITLE.length];  
        }  
  c) 在activity中的:Fragmentmanager 
FragmentManager fragmentManager = getSupportFragmentManager();
Fragment的Fragmentmanager 
FragmentManager fragmentManager = getChildFragmentManager();

参考:http://blog.csdn.net/harvic880925/article/details/38453725 

http://www.jianshu.com/p/e5abbda4a71c

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值