Android ViewPager(多页面左右滑动,可做app使用导航)

本文介绍了Android中的ViewPager组件,它是一个用于展示多个页面并支持左右滑动的容器。ViewPager依赖PagerAdapter来提供数据,通常与Fragment配合使用。PagerAdapter通过回调函数管理页面更新,包括instantiateItem()用于创建页面视图,destroyItem()用于销毁页面,getCount()获取页面数量,isViewFromObject()检查对象与视图的对应关系。数据集变化时,需要在主线程调用notifyDataSetChanged()。
摘要由CSDN通过智能技术生成
很多app中都有这个应用,我们来看几张图片

这种导航我们都不陌生,如何做到就需要使用ViewPager
ViewPager的基本使用很简单,首先需要引入V4包,  ViewPager是android扩展包v4包中的类,这个类可以让用户左右切换当前的view,GooGLE API中这样描述:
Layout manager that allows the user to flip left and right through pages of data. You supply an implementation of a PagerAdapter to generate the pages that the view shows.
Note this class is currently under early design and development. The API will likely change in later updates of the compatibility library, requiring changes to the source code of apps when they are compiled against the newer version.
ViewPager is most often used in conjunction with Fragment, which is a convenient way to supply and manage the lifecycle of each page. There are standard adapters implemented for using fragments with the ViewPager, which cover the most common use cases. These are FragmentPagerAdapter andFragmentStatePagerAdapter; each of these classes have simple code showing how to build a full user interface with them.
其实就说明了3点:

  1)ViewPager类直接继承了ViewGroup类,所有它是一个容器类,可以在其中添加其他的view类。

  2)ViewPager类需要一个PagerAdapter适配器类给它提供数据。

  3)ViewPager经常和Fragment一起使用,并且提供了专门的FragmentPagerAdapter和FragmentStatePagerAdapter类供Fragment中的ViewPager使用。

ViewPager继承PagerAdapter必须实现4个复写方法

public Object instantiateItem(ViewGroup container, int position)

public void destroyItem(ViewGroup container, int position,Object object) 

public int getCount()

public boolean isViewFromObject(View arg0, Object arg1) 

初始化引入布局,ViewPager滑动页面,每个页面需要写一个布局,然后在代码中添加到list中用adapter对象传给adapter,实现4个方法, 我们要解释一下运行机制(对应api给出翻译):

PagerAdapter比AdapterView的使用更加普通.ViewPager使用回调函数来表示一个更新的步骤,而不是使用一个视图回收机制。在需要的时候pageradapter也可以实现视图的回收或者使用一种更为巧妙的方法来管理视图,比如采用可以管理自身视图的fragment。

viewpager 不直接处理每一个视图而是将各个视图与一个键联系起来。这个键用来跟踪且唯一代表一个页面,不仅如此,该键还独立于这个页面所在adapter的位置。当 pageradapter将要改变的时候他会调用startUpdate函数,接下来会调用一次或多次的instantiateItem或者 destroyItem。最后在更新的后期会调用finishUpdate。当finishUpdate返回时 instantiateItem返回的对象应该添加到父ViewGroup destroyItem返回的对象应该被ViewGroup删除。methodisViewFromObject(View, Object)代表了当前的页面是否与给定的键相关联。
 
对于非常简单的pageradapter或许你可以选择用page本身作为键,在创建并且添加到viewgroup后instantiateItem方法里返回该page本身即可
destroyItem将会将该page从viewgroup里面移除。isViewFromObject方法里面直接可以返回view == object。
 
pageradapter 支持数据集合的改变,数据集合的改变必须要在主线程里面执行,然后还要调用notifyDataSetChanged方法。和baseadapter非常 相似。数据集合的改变包括页面的添加删除和修改位置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值