当前位置: 首页 > news >正文

viewPager的adapter--FragmentInstancePagerAdapter

之前分享过几个tab+viewPager的库。。这种东西开发中特别常见。今天抽空补一个viewPager的adapter。用来搭配使用

创建FragmentInstancePagerAdapter,如下:

mport androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentStatePagerAdapter/*** 为每个类型 Fragment 都只出现一个的 ViewPager 准备的 Adapter** @author* @date*/
class FragmentInstancePagerAdapter(fm: FragmentManager
) : FragmentStatePagerAdapter(fm) {private val list = mutableListOf<AdapterFragmentPager<*>>()inline fun <reified T : Fragment> append(title: CharSequence?,noinline creator: () -> T) {append(T::class.java, title, creator)}/*** 追加一个Fragment* @param clazz   Fragment类型的Class* @param title   标题* @param creator 创建该Fragment实例*/fun <T : Fragment> append(clazz: Class<T>,title: CharSequence?,creator: () -> T) {list.add(AdapterFragmentPager(clazz, title, creator))notifyDataSetChanged()}inline fun <reified T : Fragment> indexOfType(): Int {return indexOfType(T::class.java)}/*** 获取指定类型Fragment的下标*/fun <T : Fragment> indexOfType(clazz: Class<T>): Int {return list.indexOfFirst { it.clazz == clazz }}inline fun <reified T : Fragment> removeByType() {removeByType(T::class.java)}/*** 移除指定类型的Fragment*/fun <T : Fragment> removeByType(clazz: Class<T>) {list.removeAll { it.clazz == clazz }notifyDataSetChanged()}override fun getItem(position: Int): Fragment {return list[position].creator()}override fun getCount(): Int {return list.size}override fun getPageTitle(position: Int): CharSequence? {return list[position].title}override fun getItemPosition(pageFragment: Any): Int {return list.indexOfFirst {it.clazz.isInstance(pageFragment)}}private class AdapterFragmentPager<T : Fragment>(val clazz: Class<T>,val title: CharSequence?,val creator: () -> T)
}

END

相关文章:

  • 思科设备静态路由配置
  • 基于springboot + vue体育馆使用预约平台
  • 创建vue项目:vue脚手架安装、vue-cli安装,vue ui界面创建vue工程(vue2/vue3),安装vue、搭建vue项目开发环境(保姆级教程二)
  • Linux学习教程(第十五章 Linux系统日志管理)
  • [wp]“古剑山”第一届全国大学生网络攻防大赛 Web部分wp
  • 基于Java酒店管理系统
  • 低代码开发:激发创新还是程序员的末日?
  • 问题:数组对象去重
  • 【Java数据结构 -- List和ArrayList与顺序表】
  • android项目实战之使用框架 集成多图片、视频的上传
  • 2024年软考科目怎么选?(选科指引)
  • vscode如何在没有网络的情况下安装插件
  • 微信小程序 - 创建 ZIP 压缩包
  • json转yolo格式
  • RabbitMQ 消息中间件 消息队列
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • 2019.2.20 c++ 知识梳理
  • android 一些 utils
  • Apache Pulsar 2.1 重磅发布
  • iOS 颜色设置看我就够了
  • PhantomJS 安装
  • Python连接Oracle
  • Vue 2.3、2.4 知识点小结
  • 第2章 网络文档
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 如何解决微信端直接跳WAP端
  • 一个JAVA程序员成长之路分享
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • raise 与 raise ... from 的区别
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • ​TypeScript都不会用,也敢说会前端?
  • #HarmonyOS:基础语法
  • #pragma 指令
  • ${ }的特别功能
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (6)添加vue-cookie
  • (二)JAVA使用POI操作excel
  • (二)斐波那契Fabonacci函数
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (精确度,召回率,真阳性,假阳性)ACC、敏感性、特异性等 ROC指标
  • (三)Kafka 监控之 Streams 监控(Streams Monitoring)和其他
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (一)UDP基本编程步骤
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .NET Core 2.1路线图
  • .Net Core webapi RestFul 统一接口数据返回格式
  • .NET 分布式技术比较
  • .NET 将多个程序集合并成单一程序集的 4+3 种方法
  • .NET 设计一套高性能的弱事件机制
  • .NET命令行(CLI)常用命令
  • [Asp.net MVC]Bundle合并,压缩js、css文件
  • [BZOJ4566][HAOI2016]找相同字符(SAM)