Android TabLayout+ViewPager2如何优雅的实现联动详解
一、介绍
Android开发过程中,我们经常会遇到滑动+导航栏的做法,之前的做法就是我们通过ViewGroup来转动,然后通过大量的自定义来完成,将导航栏item与viewpage
滑动,达到业务需求
二、现实方案
通过介绍,我们大概知道业务情况。针对这种需求,Google在material库中提供了一套解决方案,低代码就可以解决这类问题。
1.需要引入库
implementation 'com.google.android.material:material:1.5.0'
2.控件三剑客
TabLayout+ViewPager2+TabLayoutMediator
TabLayout
负责item的view,创建与管理,并提供了item的管理,和下划线的管理
app:tab开头,主要是tabview的管理,
app:tabIndicator:主要是对下划线管理,更多资料,可以自己实现
<com.google.android.material.tabs.TabLayoutandroid:id="@+id/layoutItem"android:layout_width="match_parent"android:layout_height="80dp"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintTop_toTopOf="parent"app:tabBackground="@null"app:tabGravity="fill"app:tabIndicatorHeight="2dp"app:tabIndicatorColor="@color/teal_200"app:tabIndicatorGravity="bottom"app:tabMaxWidth="0.0dp"app:tabIndicatorFullWidth="false"app:tabMode="fixed"/>
ViewPager2:
就是我们常见的viewpage2,只要实现完即可。
TabLayoutMediator:
是管理tablayout与viewpage2的联动,不需要额外的任何支持。所有的滑动与联动关系已处理好了,实现了低代码
注意:正常viewpage2的itemcount要和tablayout准备的资源数组长度一样,否则出现数据越界或者达不到自己的要求。
mediator= TabLayoutMediator(tablayout!!,viewPager!!,{tab,position->tab.text=titleArray.get(position)})if (!mediator!!.isAttached){mediator!!.attach()}
以上就是绑定关系,tab的处理是通过准备好的资源,需要对tab处理,可以在回调中进行。
详细demo:
class TabLayoutActivity:FragmentActivity() {private val titleArray by lazy { resources.getStringArray(R.array.title) }private var viewPager: ViewPager2? = nullprivate var adapter: MyAdapter? = nullprivate var tablayout:TabLayout?=nullprivate var mediator:TabLayoutMediator?=nulloverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.layout_tablayout)viewPager = findViewById(R.id.viewpage)adapter = MyAdapter(this)viewPager?.apply {orientation = ViewPager2.ORIENTATION_VERTICALadapter = this@TabLayoutActivity.adapter}tablayout=findViewById(R.id.layoutItem)mediator= TabLayoutMediator(tablayout!!,viewPager!!,{tab,position->tab.text=titleArray.get(position)})if (!mediator!!.isAttached){mediator!!.attach()}adapter!!.addData(titleArray.toMutableList())}inner class MyAdapter : FragmentStateAdapter {constructor(activity: FragmentActivity) : super(activity)private val mlsit = mutableListOf<Fragment>()override fun getItemCount(): Int {return mlsit.size}override fun createFragment(position: Int): Fragment {return mlsit.get(position)}public fun addData(list: List<String>) {list.forEachIndexed { index, it ->mlsit.add(MyFragment.getInstance(it))}notifyItemRangeChanged(0, mlsit.size)}} }
相关文章:

Android TabLayout+ViewPager2如何优雅的实现联动详解
一、介绍 Android开发过程中,我们经常会遇到滑动导航栏的做法,之前的做法就是我们通过ViewGroup来转动,然后通过大量的自定义来完成,将导航栏item与viewpage 滑动,达到业务需求 二、现实方案 通过介绍,我…...

k8s快速部署一个网站
1)使用Deployment控制器部署镜像: kubectl create deployment web-demo --imagelizhenliang/web-demo:v1 kubectl get deployment,pods[rootk8s-matser ~]# kubectl get pods NAME READY STATUS RESTARTS A…...

期货量化交易客户端开源教学第四节——交易接口协议
指令介绍: 01----09:服务端发送到客户端指令 10----49:客户端发送操作指令 50----59:客户端与服务端通讯指令 60----99:股票接口与服务端交互指令 --------------------------------------------------- 02:商品行情 03:用户信息接收 04:用户资产信息接收 ----发送到…...

M1000 4G蓝牙网关:高速稳定,赋能物联网新体验
桂花网M1000的4G移动网络功能主要体现在以下几个方面: 一、高速稳定的数据传输 高速率:M1000支持4G移动网络,能够实现高速的数据传输。根据4G网络的技术标准,其理论上的最大下行速率可达到数百Mbps(如TD-LTE在20MHz带…...

中国高端水果元宇宙
高档榴莲通常指的是品质上乘、口感极佳、产地知名且价格较高的榴莲品种。榴莲因其独特的风味和营养价值而被誉为“水果之王”,在东南亚尤其受欢迎。以下是一些被认为是高档榴莲的品种: 1.**猫山王榴莲(Musang King or Mao Shan Wangÿ…...

MySQL:库操作
1. 创建数据库 create database [if not exists] name [create_specification], [create_specification]... []内为可选的选项 create_specification: character set charset_name -- 指定数据库采用的字符集 -- 数据库未来存储数据 collate collation_name -- 指定数据库字符…...

struts2如何防止XSS脚本攻击(XSS防跨站脚本攻击过滤器)
只需要配置一个拦截器即可解决参数内容替换 一、配置web.xml <filter><filter-name>struts-xssFilter</filter-name><filter-class>*.*.filters.XssFilter</filter-class></filter><filter-mapping><filter-name>struts-xss…...

SQL基础 | NOT NULL 约束介绍
在SQL中,NOT NULL是一个约束条件,用于确保列不接受NULL值。 这个约束通常在创建表或修改表时使用,以确保数据的完整性和准确性。 以下是NOT NULL的一些常见用法: 创建表时指定NOT NULL约束: 当你创建一个新表时&#x…...

C语言 ——— 实用调试技巧(Visual Studio)
目录 Debug 和 Release 的区别 F10 --- 逐过程调试 & F11 --- 逐语句调试 F9 --- 新建/切换断点 & F5 --- 开始调试 shift F5 & ctrl F5 Debug 和 Release 的区别 Debug:通常为调试版本,它包含调试信息,并且不作任何优化…...

音频demo:使用faad2将AAC数据解码出PCM数据
1、README 前言 本demo是使用的开源项目faad2将aac数据解码成pcm数据。 a. 编译使用 faad2的编译:(faad2下载地址:https://sourceforge.net/projects/faac/files/faad2-src/faad2-2.8.0/) tar xzf faad2-2.8.8.tar.gz cd faad2-2.8.8/ ./configure …...

力扣 hot100 -- 多维动态规划
👇woc,这不是最熟悉那种,记忆化 dfs 或者 普通的深度优先搜索??都适用于二维地图👇 DFS(深度优先搜索)8种题型_dfs典型问题-CSDN博客 目录 🥃不同路径 🌼最…...

[misc]-流量包-wireshark-icmp
wireshark打开,大部分都是icmp,查看data部分 提取data长度: tshark.exe -r 1.pcapng -T fields -e data.len > length.txt 使用python解析这个文件,剔除异常值,每8个取一个值,得到flag ds [] with open(length.tx…...

探索性数据分析:使用Python与Pandas库实现数据洞察
探索性数据分析:使用Python与Pandas库实现数据洞察 引言 在当今数据驱动的时代,数据分析已成为决策制定、策略规划和业务优化的关键环节。无论是商业智能、金融分析还是市场研究,数据分析都扮演着至关重要的角色。Pandas库作为Python生态系统…...

枚举的高阶用法之枚举里写方法以及注入spring的bean
1、前言 一般我们使用枚举都是用来定义一些常量。比如我们需要一个表示订单类(pc订单、手机订单)的常量,那我们就可以使用枚举来实现,如下: AllArgsConstructor public enum OrderTypeEnum{PC("PC", "电脑端"),PHONE("PHONE", "手机端&quo…...

游戏开发面试题2
网络游戏分为客户端和服务端,你能说说客户端和服务端都干了一些什么工作吗? 客户端(Client) 客户端是玩家直接交互的部分,主要负责用户界面、输入处理、渲染和部分逻辑处理。具体工作包括: 用户界面&…...

华为机试题-单车道汽车通行时间-Java
代码在最后面 1 题目描述 M(1 ≤ M ≤ 20)辆车需要在一条不能超车的单行道到达终点,起点到终点的距离为 N(1 ≤ N ≤ 400)。 速度快的车追上前车后,只能以前车的速度继续行驶,求最后一辆车到达…...

6-5,web3浏览器链接区块链(react+区块链实战)
6-5,web3浏览器链接区块链(react区块链实战) 6-5 web3浏览器链接区块链(调用读写合约与metamask联动) 6-5 web3浏览器链接区块链(调用读写合约与metamask联动) 这里就是浏览器端和智能合约的交…...

C# 多态性
C# 多态性 介绍 多态性是面向对象编程(OOP)的一个核心概念,它允许不同类的对象对同一消息做出响应,并产生不同的结果。在C#中,多态性主要通过继承、接口和虚方法来实现。本文将深入探讨C#中的多态性,包括其原理、实现方式以及在实际编程中的应用。 原理 多态性允许将…...

Visual Studio 安装程序无法执行修复或更新
一.问题场景 出现问题的场景:当你的VS已经安装但是无法在工具中下载新组件或者卸载了当时一直无法安装。 二.问题原因 如果计算机上的 Visual Studio 实例已损坏,则可能会出现此问题。 三.解决方法 如果之前尝试修复或更新 Visual Studio 失败&…...

C#与PLC通信——如何设置电脑IP地址
前言: 我们与PLC通过以太网通信时,首先要做的就是先设置好电脑的IP,这样才能实现上位机电脑与PLC之间的通信,并且电脑的ip地址和PLC的Ip地址要同处于一个网段,比如电脑的Ip地址为192.168.1.1,那么PLC的Ip地…...

Milvus 核心设计(1) ---- 数据一致性的等级及使用场景
目录 背景 Milvus的数据一致性 设置数据一致性等级 等级类型 PACELC定理 level 详细解释 Strong Bounded staleness Session Eventually 总结 背景 分布式上的可扩展性是个比较重要的concept。Chroma 核心之前写过了,他的最大优势在于轻量级且好用。Milvus相对Ch…...

EasyCVR视频技术:城市电力抢险的“千里眼”,助力抢险可视化
随着城市化进程的加速和电力需求的不断增长,电力系统的稳定运行对于城市的正常运转至关重要。然而,自然灾害、设备故障等因素常常导致电力中断,给城市居民的生活和企业的生产带来严重影响。在这种情况下,快速、高效的电力抢险工作…...

【Wamp】局域网设备访问WampServer | 使用域名访问Wamp | Wamp配置HTTPS
局域网设备访问WampServer 参考:https://www.jianshu.com/p/d431a845e5cb 修改Apache的httpd.conf文件 D:\Academic\Wamp\program\bin\apache\apache2.4.54.2\conf\httpd.conf 搜索 Require local 和Require all denied,改为Require all granted <…...

采用自动微分进行模型的训练
自动微分训练模型 简单代码实现: import torch import torch.nn as nn import torch.optim as optim# 定义一个简单的线性回归模型 class LinearRegression(nn.Module):def __init__(self):super(LinearRegression, self).__init__()self.linear nn.Linear(1, 1) …...

k8s怎么配置secret呢?
在Kubernetes中,配置Secret主要涉及到创建、查看和使用Secret的过程。以下是配置Secret的详细步骤和相关信息: ### 1. Secret的概念 * Secret是Kubernetes用来保存密码、token、密钥等敏感数据的资源对象。 * 这些敏感数据可以存放在Pod或镜像中&#x…...

算法篇 滑动窗口 leetcode 长度最小的子数组
长度最小的子数组 1. 题目描述2. 算法图分析2.1 暴力图解2.2 滑动窗口图解 3. 代码演示 1. 题目描述 2. 算法图分析 2.1 暴力图解 2.2 滑动窗口图解 3. 代码演示...

数据库作业d8
要求: 一备份 1 mysqldump -u root -p booksDB > booksDB_all_tables.sql 2 mysqldump -u root -p booksDB books > booksDB_books_table.sql 3 mysqldump -u root -p --databases booksDB test > booksDB_and_test_databases.sql 4 mysql -u roo…...

前后端数据交互设计到的跨域问题
前后端分离项目的跨域问题及解决办法 一、跨域简述 1、问题描述 这里前端vue项目的端口号为9000,后端springboot项目的端口号为8080 2、什么是跨域 当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同即为跨域 当前页面url被请求页面url是否…...

非洲猪瘟监测设备的作用是什么?
TH-H160非洲猪瘟监测设备的主要作用是迅速、准确地检测出非洲猪瘟病毒,从而帮助控制和预防疫情的扩散。这些设备利用先进的生物传感技术和PCR分子生物学方法,能够在极短的时间内提供精确的检测结果<sup>1</sup><sup>2</sup><…...

移动硬盘损坏无法读取?专业恢复策略全解析
在数字化信息爆炸的今天,移动硬盘作为我们存储和传输大量数据的重要工具,其安全性和稳定性直接关系到个人与企业的数据安全。然而,当移动硬盘突然遭遇损坏,无法正常读取时,我们该如何应对?本文将深入探讨移…...