Android笔记(三)多Activity活动的切换中的简化处理

news2025/4/27 4:02:15

多Activity实现的跳转简单实现

Activity定义移动的界面。在本例中,介绍多个活动之间的切换的简化通用的实现。在本例中,定义三个活动MainActivity、FirstActivity和SecondActivity.要求能从MainActivity分别切换到FirstActivity和SecondActivity,运行效果如下所示:

在这里插入图片描述

一、定义FirstActivity

class FirstActivity : ComponentActivity()  {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent{
            FirstScreen()
        }
    }
}

@Composable
fun FirstScreen(){
    Box(modifier= Modifier
        .fillMaxSize()
        .background(Color.Green),
        contentAlignment = Alignment.Center){
        Text( text ="第一个界面",fontSize=30.sp,color = Color.Yellow)
    }
}

二、定义SecondActivity

class SecondActivity : ComponentActivity()  {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent{
            SecondScreen()
        }
    }
}

@Composable
fun SecondScreen(){
    Box(modifier= Modifier
        .fillMaxSize()
        .background(Color.Blue),
        contentAlignment = Alignment.Center){
        Text( text ="第二个界面",fontSize=30.sp,color = Color.Yellow)
    }
}

三、MainActivity的实现跳转传统处理方式

定义交互,实现不同活动的跳转。

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            ForCourseTheme {
                // A surface container using the 'background' color from the theme
                Surface(
                    modifier = Modifier.fillMaxSize(),
                    color = MaterialTheme.colorScheme.background
                ) {
                    MainScreen()
                }
            }
        }
    }
}

@Composable
fun MainScreen(modifier: Modifier = Modifier) {
    val context = LocalContext.current
    Box(contentAlignment= Alignment.Center){
        Column(horizontalAlignment = Alignment.CenterHorizontally){
            Button(modifier = Modifier.width(200.dp),onClick={
                val intent = Intent(context,FirstActivity::class.java)
                context.startActivity(intent)
            }){
                Text(text = "FirstActivity",fontSize = 18.sp)
                Icon(imageVector=Icons.Filled.ArrowForward,contentDescription = "第一个活动")
            }

            Button(modifier = Modifier.width(200.dp),onClick={
                val intent = Intent(context,SecondActivity::class.java)
                context.startActivity(intent)
            }){
                Text(text = "SecondActivity",fontSize = 18.sp)
                Icon(imageVector=Icons.Filled.ArrowForward,contentDescription = "第二个活动")
            }
        }
    }
}

在上述的MainActivity通过定义两个按钮实现对不同活动的跳转。

四、对MainActivity的优化处理

可以在MainActivity中调用自定义的按钮,通过按钮实现不同活动的跳转。这时定义的自定义按钮函数如下:

@Composable
fun <T> CustomButton(title:String,context: Context,classType:Class<T>){
    Button(modifier = Modifier.width(200.dp),onClick={
        val intent = Intent(context,classType)
        context.startActivity(intent)
    }){
        Text(text =title,fontSize = 18.sp)
        Icon(imageVector=Icons.Filled.ArrowForward,contentDescription = title)
    }
}

这里,定义了一个通用的函数CustomButton,并且指定一个类型变量T,函数参数接受参数,可以创建一个自定按钮,这个自定按钮完成了按钮的文本和图标的定义,并设置点击动作,使得点击动作能从不同活动进行跳转。修改上述的MainActivity活动要调用的MainScreen函数,这时代码为:

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            ForCourseTheme {
                // A surface container using the 'background' color from the theme
                Surface(
                    modifier = Modifier.fillMaxSize(),
                    color = MaterialTheme.colorScheme.background
                ) {
                    MainScreen()
                }
            }
        }
    }
}

@Composable
fun MainScreen(modifier: Modifier = Modifier) {
    val context = LocalContext.current
    Box(contentAlignment= Alignment.Center){
        Column(horizontalAlignment = Alignment.CenterHorizontally){
            CustomButton(title = "FirstActivity", context =context , 
                         classType =FirstActivity::class.java)
            CustomButton(title="SecondActivity",context = context,
                         classType = SecondActivity::class.java)
        }
    }
}

可以发现代码量减少。同样,如果定义的功能有类似的特征,可以考虑定义通用的函数或类,来达到一次定义,多次调用的目的。

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

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

相关文章

VMware _ Ubuntu _ root 密码是什么,怎么进入 root 账户

文章目录 进入 root 账户设置 root 密码小结 在 VMware 安装 ubuntu 虚拟机之后&#xff0c;root 用户的密码是什么&#xff1f;安装的过程也没有提示输入 root 用户的密码&#xff0c;只有创建第一个非 root 用户的密码。但是 root 用户是存在的&#xff0c;又怎么切换到 root…

【面试高频题】难度 1/5,经典树的搜索(多语言)

题目描述 这是 LeetCode 上的 「109. 有序链表转换二叉搜索树」 &#xff0c;难度为 「中等」 Tag : 「二叉树」、「树的搜索」、「分治」、「中序遍历」 给定一个单链表的头节点 head&#xff0c;其中的元素 按升序排序 &#xff0c;将其转换为高度平衡的二叉搜索树。 本题中&…

Webpack和JShaman相比有什么不同?

Webpack和JShaman相比有什么不同&#xff1f; Webpack的功能是打包&#xff0c;可以将多个JS文件打包成一个JS文件。 JShaman专门用于对JS代码混淆加密&#xff0c;目的是让JavaScript代码变的不可读、混淆功能逻辑、加密代码中的隐秘数据或字符&#xff0c;是用于代码保护的…

Android笔记(四)Activity之间传递可序列化的数据的优化处理

Activity之间传递可序列化的数据 Android应用开发会常常处理数据的序列化和传递。在Android中往往采用两种方式实现数据的可序列化&#xff1a;&#xff08;1&#xff09;实现java.io.Serializable接口&#xff08;2&#xff09;实现android.os.Parcelable接口。 将类定义为an…

C++标准模板(STL)- 类型支持 (数值极限,is_modulo,digits,digits10)

数值极限 定义于头文件 <limits> 定义于头文件 <limits> template< class T > class numeric_limits; numeric_limits 类模板提供查询各种算术类型属性的标准化方式&#xff08;例如 int 类型的最大可能值是 std::numeric_limits<int>::max() &…

Appium自动化测试框架:关键字驱动+数据驱动

1. 关键字驱动框架简介 原理及特点 关键字驱动测试是数据驱动测试的一种改进类型&#xff0c;它也被称为表格驱动测试或者基于动作字的测试。主要关键字包括三类&#xff1a;被操作对象&#xff08;Item&#xff09;、操作行为&#xff08;Operation&#xff09;和操作值&…

[python 刷题] 239 Sliding Window Maximum

[python 刷题] 239 Sliding Window Maximum 题目&#xff1a; You are given an array of integers nums, there is a sliding window of size k which is moving from the very left of the array to the very right. You can only see the k numbers in the window. Each ti…

抖音直播招聘小程序可以增加职位展示,提升转化率,增加曝光度

抖音直播招聘报白是指进入抖音的白名单&#xff0c;允许在直播间或小视频中发布招聘或找工作等关键词。否则会断播、不推流、限流。抖音已成为短视频流量最大的平台&#xff0c;但招聘企业数量较少。抖音招聘的优势在于职位以视频、直播方式展示&#xff0c;留存联系方式更加精…

C语言 位操作

定义 位操作提高程序运行效率&#xff0c;减少除法和取模的运算。在计算机程序中&#xff0c;数据的位是可以操作的最小数据单位&#xff0c;理论上可以用“位运算”来完成所有的运算和操作。 左移 后空缺自动补0 右移 分为逻辑右移和算数右移 逻辑右移 不管什么类型&am…

基于PySide6的数据处理及可视化分析软件开发

基于PySide6的数据处理及可视化分析软件开发 前言 前言 絮絮叨叨&#xff1a;最近也是在实验室摸鱼&#x1f41f;的日子&#xff0c;先来占个坑位吧。最近在开发一款PC端的软件&#xff0c;打算用于我的毕业设计的最后一章。本来想用新学的框架React来作项目的前端框架&#x…

opencv定位图片中的图案?

import cv2 as cv2def find_positions(image_path, small_image_path):# 读取大图和小图large_image cv2.imread(image_path)small_image cv2.imread(small_image_path)# 小图规格small_image_h, small_image_w small_image.shape[:2]# 对比大图与小图# 匹配模板res cv2.ma…

使用8线-3线优先编码器Ⅰ实现16线-4线优先编码器

描述 ②请使用2片该优先编码器Ⅰ及必要的逻辑电路实现16线-4线优先编码器。优先编码器Ⅰ的真值表和代码已给出。 可将优先编码器Ⅰ的代码添加到本题答案中&#xff0c;并例化。 优先编码器Ⅰ的代码如下&#xff1a; module encoder_83(input [7:0] I ,input …

PicGo+Gitee+Typora搭建云图床

&#x1f648;作者简介&#xff1a;练习时长两年半的Java up主 &#x1f649;个人主页&#xff1a;程序员老茶 &#x1f64a; ps:点赞&#x1f44d;是免费的&#xff0c;却可以让写博客的作者开心好久好久&#x1f60e; &#x1f4da;系列专栏&#xff1a;Java全栈&#xff0c;…

Redis根据中心点坐标和半径筛选符合的数据

目录 1.启动Redis​编辑 2.导入maven依赖 3.添加redis配置 4.编写RedisService 5.使用 6.验证 1.启动Redis 2.导入maven依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifac…

软件UI自动化测试应该怎么做?对软件产品起到什么作用?

在软件开发过程中&#xff0c;开发人员需要编写大量的代码来实现软件产品的功能。而这些功能往往需要在用户界面上进行展示和操作&#xff0c;称为UI(User Interface)。UI自动化测试是为了检测软件界面是否符合预期的设计和用户操作&#xff0c;通过自动化测试工具和脚本&#…

React之setState

一、useState使用规则 1、useState 函数可以执行多次&#xff0c;每次执行互相独立&#xff0c;每调用一次为函数组件提供一个状态 2、useState只能出现在【函数组件】或者其他hook函数中 3、不能嵌套在if/for/其它函数中&#xff08;react按照hooks的调用顺序识别每一个hook&…

软件开发人员 Kubernetes 入门指南|Part 2

在第 1 部分中&#xff0c;我们讲解了 Kubernetes 的核心组件&#xff0c;Kubernetes 是一种开源容器编排器&#xff0c;用于在分布式环境中部署和扩展应用程序&#xff1b;我们还讲解了如何在集群中部署一个简单的应用程序&#xff0c;然后更改其副本数量以扩大或缩小其规模。…

本地生活将成快手新的营收增长点

监制 | 何玺 排版 | 叶媛 快手本地生活开始强化B端市场。 据了解&#xff0c;快手 “本地商家”APP已经正式上线。这是快手为本地生活商家推出的独立工作平台&#xff0c;有助于商家提升经营效率。 新APP的上线&#xff0c;标志着快手本地生活业务布局&#xff0c;正从过去侧…

基于Java的宠物领养管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

DOSBox和MASM汇编开发环境搭建

DOSBox和MASM汇编开发环境搭建 1 安装DOSBox2 安装MASM3 编译测试代码4 运行测试代码5 调试测试代码 本文属于《 X86指令基础系列教程》之一&#xff0c;欢迎查看其它文章。 1 安装DOSBox 下载DOSBox和MASM&#xff1a;https://download.csdn.net/download/u011832525/884180…