百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

ViewPager2:官方Viewpager升级版来临

bigegpt 2024-10-22 10:04 4 浏览

浏览安卓开发者官网的时候,发现google悄然推出了一个新的控件:ViewPager2 ,一看名称就知道这是一个和我们常用的 ViewPager 功能相似的控件,算是ViewPager的升级版吧。目前还只是推出了第一个预览版,我们可以直接引入来使用了:

implementation 'androidx.viewpager2:viewpager2:1.0.0-alpha04'

我们先来看看有哪些功能和使用上的变化:https://developer.android.google.cn/jetpack/androidx/releases/viewpager2

新功能:

  • 支持RTL布局
  • 支持竖向滚动
  • 完整支持notifyDataSetChanged

API的变动:

  • FragmentStateAdapter替换了原来的 FragmentStatePagerAdapter
  • RecyclerView.Adapter替换了原来的 PagerAdapter
  • registerOnPageChangeCallback替换了原来的 addPageChangeListener
  • 看了上面这些介绍,有一点比较吸引人的就是支持竖向滚动了,这是怎么实现的呢?ViewPager2的源码不长,我们来简单分析一下。

简单解析

通过查看源码得知,ViewPager2是直接继承ViewGroup的,意味着和ViewPager不兼容,类注释上也写了它的作用是取代ViewPager,不过短时间内ViewPager应该还不会被废弃掉。

继续查看源码,发现了两个比较重要的成员变量:

 private RecyclerView mRecyclerView;
 private LinearLayoutManager mLayoutManager;

所以很清楚得知,ViewPager2的核心实现就是RecyclerView+LinearLayoutManager了,因为LinearLayoutManager本身就支持竖向和横向两种布局方式,所以ViewPager2也能很容易地支持这两种滚动方向了,而几乎不需要添加任何多余的代码。

其实在此之前也不乏有大神采用RecyclerView来实现轮播图效果的,具体实现发生略有不同,但大体思想是一致的。这次ViewPager2的推出意味着这种方法终于被扶正了。

为了让RecyclerView变得像原来的ViewPager,需要设置下SnapHelper:

 new PagerSnapHelper().attachToRecyclerView(mRecyclerView);

熟悉RecyclerView的同学都知道,SnapHelper用于辅助RecyclerView在滚动结束时将Item对齐到某个位置。PagerSnapHelper的作用让滑动结束时使当前Item居中显示,并且 限制一次只能滑动一页,不能快速滑动,这样就和viewpager的交互很像了。

另外和viewpager一样,viewpager2可以承载fragment,我们需要继承实现它提供的FragmentStateAdapter:

public abstract class FragmentStateAdapter extends
 RecyclerView.Adapter<FragmentViewHolder> implements StatefulAdapter

这是一个包含FragmentManager和数据状态恢复功能的RecyclerView.Adapter,具体实现可以参看源码。所以大家也可以用TabLayout+ViewPager2+Fragment来实现联动展示效果。

使用

通过android:orientation来指定滚动方向

 <androidx.viewpager2.widget.ViewPager2
 android:id="@+id/viewpager2"
 android:layout_width="match_parent"
 android:layout_height="200dp"
 android:orientation="vertical" />

在代码中设置一个普通的RecyclerView.adapter:

 ViewPager2 viewPager2=findViewById(R.id.viewpager2);
 RecyclerviewAdapter adapter = new RecyclerviewAdapter(this);
 viewPager2.setAdapter(adapter);

这样竖直轮播图就大功告成了。

小结

viewpager2利用recyclerview来实现viewpager的功能,无疑使使其可扩展性大大提升,代码也变得更优雅简洁,使用起来也更灵活。不过目前viewpager2只是第一个预览版,还存在稳定性方面的问题,不建议大家引入到正式项目中来,尝尝鲜就好。

想学习更多Android知识,或者获取相关资料请关注我,并私信回复【资料】。 有面试资源系统整理分享,Java语言进阶和Kotlin语言与Android相关技术内核,APP开发框架知识, 360°Android App全方位性能优化。Android前沿技术,高级UI、Gradle、RxJava、小程序、Hybrid、 移动架构师专题项目实战环节、React Native、等技术教程!架构师课程、NDK模块开发、 Flutter等全方面的 Android高级实践技术讲解。还有在线答疑

相关推荐

Docker篇(二):Docker实战,命令解析

大家好,我是杰哥上周我们通过几个问题,让大家对于Docker有了一个全局的认识。然而,说跟练往往是两个概念。从学习的角度来说,理论知识的学习,往往只是第一步,只有经过实战,才能真正掌握一门技术所以,本...

docker学习笔记——安装和基本操作

今天学习了docker的基本知识,记录一下docker的安装步骤和基本命令(以CentOS7.x为例)一、安装docker的步骤:1.yuminstall-yyum-utils2.yum-con...

不可错过的Docker完整笔记(dockerhib)

简介一、Docker简介Docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源。Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,...

扔掉运营商的 IPTV 机顶盒,全屋全设备畅看 IPTV!

其实现在看电视节目的需求确实大大降低了,折腾也只是为了单纯的让它实现,享受这个过程带来的快乐而已,哈哈!预期构想家里所有设备直接接入网络随时接收并播放IPTV直播(电信点播的节目不是太多,但好在非常稳...

第五节 Docker 入门实践:从 Hello World 到容器操作

一、Docker容器基础运行(一)单次命令执行通过dockerrun命令可以直接在容器中执行指定命令,这是体验Docker最快捷的方式:#在ubuntu:15.10容器中执行ech...

替代Docker build的Buildah简单介绍

Buildah是用于通过较低级别的coreutils接口构建OCI兼容镜像的工具。与Podman相似,Buildah不依赖于Docker或CRI-O之类的守护程序,并且不需要root特权。Builda...

Docker 命令大全(docker命令大全记录表)

容器生命周期管理run-创建并启动一个新的容器。start/stop/restart-这些命令主要用于启动、停止和重启容器。kill-立即终止一个或多个正在运行的容器rm-于删除一个或...

docker常用指令及安装rabbitMQ(docker安装rabbitmq配置环境)

一、docker常用指令启动docker:systemctlstartdocker停止docker:systemctlstopdocker重启docker:systemctlrestart...

使用Docker快速部署Storm环境(docker部署confluence)

Storm的部署虽然不是特别麻烦,但是在生产环境中,为了提高部署效率,方便管理维护,使用Docker来统一管理部署是一个不错的选择。下面是我开源的一个新的项目,一个配置好了storm与mono环境的D...

Docker Desktop安装使用指南:零基础教程

在之前的文章中,我多次提到使用Docker来安装各类软件,尤其是开源软件应用。鉴于不少读者对此有需求,我决定专门制作一期关于Docker安装与使用的详细教程。我主要以Macbook(Mac平台)为例进...

Linux如何成功地离线安装docker(linux离线安装httpd)

系统环境:Redhat7.2和Centos7.4实测成功近期因项目需要用docker,所以记录一些相关知识,由于生产环境是不能直接连接互联网,尝试在linux中离线安装docker。步骤1.下载...

Docker 类面试题(常见问题)(docker面试题目)

Docker常见问题汇总镜像相关1、如何批量清理临时镜像文件?可以使用sudodockerrmi$(sudodockerimages-q-fdanging=true)命令2、如何查看...

面试官:你知道Dubbo怎么优雅上下线的吗?你:优雅上下线是啥?

最近无论是校招还是社招,都进行的如火如荼,我也承担了很多的面试工作,在一次面试过程中,和候选人聊了一些关于Dubbo的知识。Dubbo是一个比较著名的RPC框架,很多人对于他的一些网络通信、通信协议、...

【Docker 新手入门指南】第五章:Hello Word

适合人群:完全零基础新手|学习目标:30分钟掌握Docker核心操作一、准备工作:先确认是否安装成功打开终端(Windows用户用PowerShell或GitBash),输入:docker--...

松勤软件测试:详解Docker,如何用portainer管理Docker容器

镜像管理搜索镜像dockersearch镜像名称拉取镜像dockerpullname[:tag]列出镜像dockerimages删除镜像dockerrmiimage名称或id删除...