温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Android开发之ViewPager的工作原理是什么

发布时间:2022-04-20 16:39:00 来源:亿速云 阅读:111 作者:iii 栏目:大数据

这篇“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的工作原理是什么”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI