本项目是一个基于Jetpack +MVVM + Retrofit + LiveData + Room + Kotlin 实现的仿皮皮虾App,采用Kotlin语言编写,实现了登录、注册、首页、视频播放、评论等功能。项目结构清晰,代码规范,适合学习和参考。
Paging3是Jetpack中的一个组件,用于实现分页加载。它可以帮助我们更方便地处理分页数据,提高用户体验。Paging3提供了多种分页方式,包括网络分页、本地分页等。
- 支持预加载和占位功能
- 支持向前向后加载分页的能力
- 支持多种数据源,包括网络和本地数据库
- 支持kotlin协程和flow以及livedata
- 支持刷新和重试能力
- 添加依赖(省略)
- pagingSource:分页数据的数据源,以及从数据源中获取数据的方法,需要实现load()函数来从数据源中获取分页数据
- pagingData:分页数据,包含当前页的数据以及分页加载的状态,分页数据的容器被称之为pagingData,每次刷新数据时都会重新创建一个pagingData实例
- PagingDataAdapter:分页适配器,支持重试,刷新,支持添加holder,footer,用于将分页数据展示到UI上,需要实现bindViewHolder()函数来将数据绑定到ViewHolder上
- PagingConfig:分页配置,用于配置分页加载的相关参数,如每页加载的数据量、预加载的页数等
- pager:分页器,用于管理分页加载,需要实现onRefresh()函数来刷新数据,以及实现onPageSelected()函数来加载下一页数据
- PagingSource.Factory:分页数据源工厂,用于创建分页数据源,需要实现create()函数来创建分页数据源
- PagingSource.LoadParams:分页加载参数,用于传递分页加载的相关参数,如当前页码、每页加载的数据量等
- PagingSource.LoadResult:分页加载结果,用于返回分页加载的结果,如成功、失败、无更多数据等
- 自定义视频播放器WrapperPlayerView的UI基于Fragment实现一个自定义播放器的页面
- 使用ExoPlayer作为视频播放器,ExoPlayer是一个高性能、可扩展的Android视频播放器,支持多种视频格式和协议
- 使用RecycleView实现一个视频播放布局,滑动视频实现自动播放的功能,一个列表公用一个视频播放器exoPlayer(pageListPlayer),一个ExoPlayerView(SurfaceTexture) 列表滑动后自动检测播放和暂停
- 显示视频画面的ExoPlayerView和用于播放控制的ExoControllerView简易复杂度,自定义。通过动态添加item到WrapperPlay里面
- 响应页面生命周期与用户手势 处理视频播放暂停,控制等显示