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


    多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)
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    二、定义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)
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    三、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 = "第二个活动")
                }
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

    在上述的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)
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    这里,定义了一个通用的函数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)
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

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

  • 相关阅读:
    AcWing 蓝桥杯AB组辅导课 06、双指针、BFS与图论
    Selenium中WebDriver最新Chrome驱动安装教程
    python 脚本 解决 windows 端口占用问题
    el-form那些事
    pytorch-fastrcnn识别王者荣耀敌方英雄血条
    158页完整版(5万字)数字化智慧停车场管理解决方案
    干货|MATLAB工具箱之PsPM的介绍与安装
    URLDNS反序列化链学习
    去注释和宏替换——深入理解预处理
    Mybatis之动态sql和分页
  • 原文地址:https://blog.csdn.net/userhu2012/article/details/133740691