网站建设相关新闻/百度推广登录入口官网网址

网站建设相关新闻,百度推广登录入口官网网址,更新wordpress,宁波网红打卡地高效实现:强调代码的性能优化。Android ViewPager2:明确技术栈。顶部导航:核心功能点。动态配置与性能优化指南:突出动态配置的灵活性和性能优化的重点。 在 Android 开发中,使用 ViewPager2 实现高效的顶部导航&…
  1. 高效实现:强调代码的性能优化。
  2. Android ViewPager2:明确技术栈。
  3. 顶部导航:核心功能点。
  4. 动态配置与性能优化指南:突出动态配置的灵活性和性能优化的重点。

在 Android 开发中,使用 ViewPager2 实现高效的顶部导航(通常结合 TabLayout)是一种常见的需求。以下是优化后的实现方案,确保代码高效、简洁且易于维护。


优化目标

  1. 高效加载:利用 FragmentStateAdapter 的特性,避免不必要的 Fragment 实例化。
  2. 动态配置:通过数据驱动的方式动态配置 TabLayoutViewPager2
  3. 代码简洁:使用 Kotlin 的特性和扩展函数减少冗余代码。
  4. 可扩展性:方便添加或删除页面,无需修改核心逻辑。

实现步骤

1. 添加依赖

确保在 build.gradle 中添加 ViewPager2Material Design 依赖:

dependencies {implementation 'androidx.viewpager2:viewpager2:1.0.0'implementation 'com.google.android.material:material:1.4.0'
}

2. 定义页面数据

使用 sealed classdata class 定义页面信息,包括标题、图标和对应的 Fragment

// Page.kt
sealed class Page(val title: String, val icon: Int) {object Home : Page("Home", R.drawable.ic_home)object Dashboard : Page("Dashboard", R.drawable.ic_dashboard)object Notifications : Page("Notifications", R.drawable.ic_notifications)companion object {val pages = listOf(Home, Dashboard, Notifications)}
}

3. 创建 Fragment

为每个页面创建对应的 Fragment

// Fragment1.kt
class Fragment1 : Fragment() {override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,savedInstanceState: Bundle?): View? {return inflater.inflate(R.layout.fragment_1, container, false)}
}// Fragment2.kt
class Fragment2 : Fragment() {override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,savedInstanceState: Bundle?): View? {return inflater.inflate(R.layout.fragment_2, container, false)}
}// Fragment3.kt
class Fragment3 : Fragment() {override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,savedInstanceState: Bundle?): View? {return inflater.inflate(R.layout.fragment_3, container, false)}
}

4. 创建适配器

使用 FragmentStateAdapter 动态加载 Fragment

class ViewPagerAdapter(fragmentActivity: FragmentActivity) : FragmentStateAdapter(fragmentActivity) {override fun getItemCount(): Int = Page.pages.sizeoverride fun createFragment(position: Int): Fragment {return when (Page.pages[position]) {is Page.Home -> Fragment1()is Page.Dashboard -> Fragment2()is Page.Notifications -> Fragment3()}}
}

5. 设置 ViewPager2 和 TabLayout

MainActivity 中设置 ViewPager2TabLayout 的联动。

class MainActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)val viewPager = findViewById<ViewPager2>(R.id.viewPager)val tabLayout = findViewById<TabLayout>(R.id.tabLayout)// 设置 ViewPager2 适配器viewPager.adapter = ViewPagerAdapter(this)// 将 TabLayout 与 ViewPager2 联动TabLayoutMediator(tabLayout, viewPager) { tab, position ->tab.text = Page.pages[position].titletab.icon = ContextCompat.getDrawable(this, Page.pages[position].icon)}.attach()}
}

6. 布局文件

activity_main.xml 中定义布局,包含 TabLayoutViewPager2

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><!-- 顶部导航 --><com.google.android.material.tabs.TabLayoutandroid:id="@+id/tabLayout"android:layout_width="match_parent"android:layout_height="wrap_content"app:tabMode="fixed"app:tabGravity="fill"/><!-- ViewPager2 --><androidx.viewpager2.widget.ViewPager2android:id="@+id/viewPager"android:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1"/></LinearLayout>

7. 扩展函数:简化 TabLayout 配置

如果需要频繁配置 TabLayout,可以将其封装为扩展函数。

// TabLayoutExtensions.kt
fun TabLayout.setupWithViewPager(viewPager: ViewPager2, pages: List<Page>) {TabLayoutMediator(this, viewPager) { tab, position ->tab.text = pages[position].titletab.icon = ContextCompat.getDrawable(context, pages[position].icon)}.attach()
}

MainActivity 中使用:

tabLayout.setupWithViewPager(viewPager, Page.pages)

优化后的优势

  1. 高效加载FragmentStateAdapter 确保 Fragment 实例的高效管理。
  2. 动态配置:通过 Page.pages 动态配置页面,避免硬编码。
  3. 代码简洁:扩展函数和 Kotlin 特性使代码更加简洁。
  4. 可扩展性:添加新页面只需在 Page 中添加一个新对象,无需修改核心逻辑。

示例:添加新页面

如果需要添加一个新页面,只需在 Page 中添加一个新对象:

object Profile : Page("Profile", R.drawable.ic_profile)

然后在 ViewPagerAdapter 中处理新页面:

override fun createFragment(position: Int): Fragment {return when (Page.pages[position]) {is Page.Home -> Fragment1()is Page.Dashboard -> Fragment2()is Page.Notifications -> Fragment3()is Page.Profile -> Fragment4() // 新增页面}
}

其他代码无需修改,系统会自动同步 TabLayout


总结

通过以上优化,ViewPager2 实现顶部导航的代码变得更加高效、简洁和易于维护。sealed class 和扩展函数的使用使代码更具可读性和可扩展性,同时避免了硬编码和重复逻辑。运行优化后的代码,你将获得一个高效的顶部导航实现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/73585.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

六种最新优化算法(TOC、MSO、AE、DOA、GOA、OX)求解多个无人机协同路径规划(可以自定义无人机数量及起始点),MATLAB代码

一、算法简介 &#xff08;一&#xff09;阿尔法进化&#xff08;Alpha Evolution&#xff0c;AE&#xff09;算法 阿尔法进化&#xff08;Alpha Evolution&#xff0c;AE&#xff09;算法是2024年提出的一种新型进化算法&#xff0c;其核心在于通过自适应基向量和随机步长的…

上传本地项目到GitHub

一、在GitHub上创建仓库 1.点击右上角头像–>点击Your repositories 2.点击New 3.创建仓库 网址复制一下&#xff0c;在后面git上传时会用到 二、打开Git Bash 1.cd 进入项目所在路径 2.输入git init 在当前项目的目录中生成本地的git管理&#xff08;当前目录下出现.…

14.使用各种读写包操作 Excel 文件:辅助模块

一 各种读写包 这些是 pandas 在底层使用的各种读写包。无须安装 pandas&#xff0c;直接使用这些读写包就能够读写 Excel 工作簿。可以尽可能地使用 pandas 来解决这类问题&#xff0c;只在 pandas 没有提供你所需要的功能时才用到读写包。 表中没有 xlwings &#xff0c;因为…

ubuntu ollama+dify实践

安装ollama 官网的指令太慢了&#xff0c;使用以下指令加速&#xff1a; export OLLAMA_MIRROR"https://ghproxy.cn/https://github.com/ollama/ollama/releases/latest/download" curl -fsSL https://ollama.com/install.sh | sed "s|https://ollama.com/dow…

spring boot+mybaits多条件模糊查询和分页查询

我们首先写一下多条件的模糊查询&#xff0c;首先在controller里面写一个接口&#xff0c;进行传参&#xff0c;我们这里要注意&#xff0c;之前写修改和增加的时候用的注解都是RequestBody,也就是说&#xff01;前端传过来一个json&#xff0c;数组也行&#xff0c;然后我们后…

HarmonyOS NEXT - 电商App实例四(登录界面)

登录界面是用户进入App的第一步&#xff0c;因此需要简洁明了&#xff0c;同时保持品牌风格的一致性。如&#xff1a;顶部区域为品牌LOGO展示&#xff0c;增加品牌识别度&#xff1b;中间区域为登录表单&#xff0c;包含输入框和按钮&#xff1b;底部区域为其他登录方式、注册入…

图解多头注意力机制:维度变化一镜到底

目录 一、多头注意力机制概述二、代码实现1. pyTorch 实现2. tensorFlow实现 三、维度变化全流程详解1. 参数设定2. 维度变化流程图3. 关键步骤维度变化 四、关键实现细节解析1. 多头拆分与合并2. 注意力分数计算3. 掩码处理技巧 五、完整运行示例六、总结与常见问题1. 核心优势…

2.8滑动窗口专题:最小覆盖子串

1. 题目链接 LeetCode 76. 最小覆盖子串 2. 题目描述 给定字符串 s 和 t&#xff0c;要求找到 s 中最小的窗口&#xff0c;使得该窗口包含 t 的所有字符&#xff08;包括出现次数&#xff09;。若不存在&#xff0c;返回空字符串。 示例&#xff1a; 输入&#xff1a;s &quo…

【数据分析大屏】基于Django+Vue汽车销售数据分析可视化大屏(完整系统源码+数据库+开发笔记+详细部署教程+虚拟机分布式启动教程)✅

目录 一、项目背景 二、项目创新点 三、项目功能 四、开发技术介绍 五、项目功能展示 六、权威视频链接 一、项目背景 汽车行业数字化转型加速&#xff0c;销售数据多维分析需求激增。本项目针对传统报表系统交互性弱、实时性差等痛点&#xff0c;基于DjangoVue架构构建…

cyberstrikelab lab2

lab2 重生之我是渗透测试工程师&#xff0c;被公司派遣去测试某网络的安全性。你的目标是成功获取所有服务器的权限&#xff0c;以评估网络安全状况。 先扫一下 ​ ​ 192.168.10.10 ​ ​ 骑士cms 先找后台路径 http://192.168.10.10:808/index.php?madmin&cind…

在 Ubuntu 服务器上使用宝塔面板搭建博客

&#x1f4cc; 介绍 在本教程中&#xff0c;我们将介绍如何在 Ubuntu 服务器 上安装 宝塔面板&#xff0c;并使用 Nginx PHP MySQL 搭建一个博客&#xff08;如 WordPress&#xff09;。 主要步骤包括&#xff1a; 安装宝塔面板配置 Nginx PHP MySQL绑定域名与 SSL 证书…

【 <一> 炼丹初探:JavaWeb 的起源与基础】之 Servlet 3.0 新特性:异步处理与注解配置

<前文回顾> 点击此处查看 合集 https://blog.csdn.net/foyodesigner/category_12907601.html?fromshareblogcolumn&sharetypeblogcolumn&sharerId12907601&sharereferPC&sharesourceFoyoDesigner&sharefromfrom_link <今日更新> 一、Servle…

使用 Homebrew 安装 OpenJDK 并配置环境变量

在 macOS 上使用 Homebrew 安装 OpenJDK 是一种简单而高效的方式。本文将使用 Homebrew 安装 OpenJDK&#xff0c;并设置环境变量以便 Java 能够正确运行。 1. 安装 Homebrew 首先&#xff0c;确保你的 macOS 系统已经安装了 Homebrew。如果没有安装&#xff0c;可以通过以下…

【C语言】编译和链接详解

hi&#xff0c;各位&#xff0c;让我们开启今日份博客~ 小编个人主页点这里~ 目录 一、翻译环境和运行环境1、翻译环境1.1预处理&#xff08;预编译&#xff09;1.2编译1.2.1词法分析1.2.2语法分析1.2.3语义分析 1.3汇编1.4链接 2.运行环境 一、翻译环境和运行环境 在ANSI C…

【AWS入门】AWS云计算简介

【AWS入门】AWS云计算简介 A Brief Introduction to AWS Cloud Computing By JacksonML 什么是云计算&#xff1f;云计算能干什么&#xff1f;我们如何利用云计算&#xff1f;云计算如何实现&#xff1f; 带着一系列问题&#xff0c;我将做一个普通布道者&#xff0c;引领广…

Flutter_学习记录_ ImagePicker拍照、录制视频、相册选择照片和视频、上传文件

插件地址&#xff1a;https://pub.dev/packages/image_picker 添加插件 添加配置 android无需配置开箱即用&#xff0c;ios还需要配置info.plist <key>NSPhotoLibraryUsageDescription</key> <string>应用需要访问相册读取文件</string> <key>N…

蓝桥与力扣刷题(蓝桥 星期计算)

题目&#xff1a;已知今天是星期六&#xff0c;请问 20^22 天后是星期几? 注意用数字 1 到 7 表示星期一到星期日。 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 解题思路&#xff0b;代码&#xff1a; 代码&#xff1…

向量数据库原理及选型

向量数据库 什么是向量什么是向量数据库原理应用场景 向量数据库的选型主流向量数据库介绍向量数据库对比主流向量数据库对比表 选型建议 什么是向量 向量是一组有序的数值&#xff0c;表示在多维空间中的位置或方向。向量通常用一个列或行的数字集合来表示&#xff0c;这些数…

以实现生产制造、科技研发、人居生活等一种或多种复合功能的智慧油站开源了

AI视频监控平台简介 AI视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;从而大大减少企业级应用约95%的开发成本。用…

软考系统架构师 — 3 操作系统

目录 3.1 考点分析 3.1 操作系统概述 3.1.1 操作系统的功能 3.1.2 操作系统的分类 3.1.3 嵌入式操作系统主要特点 3.2 进程 3.2.1 进程的组成和状态 3.2.2 前趋图与进程资源图&#xff08;重点&#xff09; 3.2.3 进程同步与互斥 3.2.4 进程调度 3.2.5 死锁 3.3 线…