十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
这篇“Android开发之ViewPager的工作原理是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Android开发之ViewPager的工作原理是什么”文章吧。
创新互联公司服务项目包括大通网站建设、大通网站制作、大通网页制作以及大通网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,大通网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到大通省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
在APP开发中,ViewPager 和PagerAdapter类在后台为我们完成了很多工作。那么ViewPager是如何工作的呢?在为大家介绍ViewPager的工作原理前,我们需要知道的是:大多情况下,我们无需了解其内部实现细节。不过,如果要自己实现PagerAdapter接口,那就要了解ViewPager-PagerAdapter和Recycler-View-Adapter各自关系的异同了。
那么什么时候需要自己实现PagerAdapter接口呢?如果需要ViewPager托管非fragment视图时,那就需要实现原生PagerAdapter接口。例如,在ViewPager中托管图片这样的常见视图对象时。
说到这里,相信大家又有疑问了,为什么选择使用ViewPager而不是RecyclerView呢?别急,南昌APP制作开发公司小编这就来告诉大家:
那是因为由于无法使用现有的Fragment,在CriminalIntent应用中使用RecyclerView需处理大量内部实现工作。Adapter需要我们及时地提供View。然而,决定fragment视图何时创建的是FragmentManager。因此,当RecyclerView要求Adapter提供fragment视图时,我们无法立即创建fragment并提供其视图。
这就是ViewPager存在的原因。它使用的是PagerAdapter类,而非原来的Adapter。PagerAdapter要比Adapter复杂得多,因为它要处理更多的视图管理工作。以下为它的基本内部实现。
PagerAdapter不使用可返回视图的onBindViewHolder(...)方法,而是使用下列方法:
public Object instantiateItem(ViewGroup container, int position)
public void destroyItem(ViewGroup container, int position, Object object)
public abstract boolean isViewFromObject(View view, Object object)
PagerAdapter.instantiateItem(ViewGroup, int)方法告诉pager adapter创建指定位置的列表项视图,然后将其添加给ViewGroup视图容器,而destroyItem(ViewGroup, int,Object)方法则告诉pager adapter销毁已建视图。注意,instantiateItem(ViewGroup, int)方法并不要求立即创建视图。因此,PagerAdapter可自行决定何时创建视图。
视图创建完成后,ViewPager会在某个时间点注意到它。为确定该视图所属的对象,ViewPager会调用isViewFromObject(View, Object) 方法。这里, Object 参数是instantiateItem(ViewGroup,int)方法返回的对象。因此,假设ViewPager调用instantiateItem(ViewGroup, 5)方法返回一个A对象,那么只要传入的View参数是第5个对象的视图,isViewFromObject(View, A)方法就应返回true值,否则返回false值。
对ViewPager来说,这是一个复杂的过程,但对于PagerAdapter来说,这算不上什么。因为PagerAdapter只要能够创建、销毁视图以及识别视图来自哪个对象即可。这样的要求显然很宽松,因而PagerAdapter能够比较自由地通过instantiateItem(ViewGroup, int)方法创建并添加新的fragment,然后返回可以跟踪管理的Object(fragment)。以下为isViewFromObject(View, Object)方法的具体实现:
@Override
public boolean isViewFromObject(View view, Object object) {
return ((Fragment)object).getView() == view;
}
可以看到,每次需要使用ViewPager时,都要覆盖实现PagerAdapter的这些方法,这真是一种磨难。幸好我们有FragmentPagerAdapter和FragmentStatePagerAdapter便利类,以至于我们不会那么麻烦!
以上就是关于“Android开发之ViewPager的工作原理是什么”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注创新互联行业资讯频道。