Activity 活动跳转(Java&Kotlin)

简介: Activity 活动跳转(Java&Kotlin)

Activity 活动跳转(Java&Kotlin


任何正式APP都不可能只有一个Activity,当有多个Activity时,怎么从一个Activity进入到另一个Activity呢?

答案就是活动跳转。


① 普通跳转


顾名思义,就是单纯从A到B,不带任何内容。


Java

  //活动跳转,从MainActivity跳转到TestActivity,普通跳转
    startActivity(new Intent(MainActivity.this,TestActivity.class));


如果把刚才Java里的代码复制到Kotlin里,会需要转译,转译后的Kotlin代码如下:


Kotlin

    //活动跳转,从MainActivity跳转到TestActivity,普通跳转
        //MainActivity.this  可以 简写成  this
        startActivity(Intent(this@MainActivity, TestActivity::class.java))

有没有感觉这个看起来比Java的更复杂啊,这当然不行啊,所以我们可以自己写。

  //TestActivity 为要跳转的页面
    startActivity<TestActivity>()


就这么简单,不管是从代码上还是从意思上都比Java要简洁明了,要这样使用的话你的Kotlin需要里引入Anko库,


第一步


修改项目的build.gradle,在buildscript里加上

ext.anko_version = '0.10.8'


修改模块的build.gradle,在dependencies里加上

implementation "org.jetbrains.anko:anko-common:$anko_version"


加完之后Sync同步一样。

然后在MainActivity中导入

import org.jetbrains.anko.startActivity


然后就可以直接使用了。


② 传递数据


实际开发中的页面跳转都不会是单纯的跳转,肯定会携带一些参数的。


Java

  //传递方
  //活动跳转时传值  通过键值的方式传递  另一页面接收根据键来取值
    Intent intent = new Intent(this,TestActivity.class);
    intent.putExtra("id",456);
    intent.putExtra("name","晨曦");
    startActivity(intent);
  //接收方
    //接收int类型数据,使用getIntExtra,如果没有拿到值则用默认值,
    //接收String类型数据,使用getStringExtra,不用默认值.
    int id = getIntent().getIntExtra("id",0);
    String name = getIntent().getStringExtra("name");

Kotlin

  //传递方
    //通过关键字to分隔键与值,前面是键 后面是 值
    //第一种写法
    startActivity<TestActivity>("id" to 456, "name" to "晨曦")
    //第二种写法
    //Pair类把参数名和参数值进行配对,这种方式和Java有点像
    startActivity<TestActivity>(
        Pair("id",456),
        Pair("name","晨曦")
    )
  //接收方
    //通过intent.extras?拿到包裹的数据,通过getInt和getString拿到相对应键的值
    val id = intent.extras?.getInt("id")
    val name = intent.extras?.getString("name")

③ 跳转时指定启动模式


在代码中动态指定页面的启动模式,因为在AndroidManifest.xml中对每个Activity只能指定唯一的启动模式,如果想在不同时候对同一个Activity运用不同的启动模式,显然固定的launchMode属性无法满足找个需求。所以Android允许在代码中手动设置启动表示,这样在不同时候调用startActivity方法就能运行特定的启动模式。


适用于setFlags方法的几种启动标志的取值说明如下表:


1665401427016.png


启动模式在Java中是比较琐碎的,在Kotlin中则通过Anko库扩展出来的intentFor函数简化启动标志的设置方式,列如,启动标志FLAG_ACTIVITY_NEW_TASK 对应的Anko写法如下:

startActivity(intent.newTask())


短小精悍


来看一下所有的Java方法对应的Anko库的写法


1665401490977.png

Java

    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//新任务
        intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);//置于栈顶
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);//清空栈顶
        intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);//历史
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK);//清除之后新建一个任务

Kotlin

    startActivity(intent.newTask())//新任务
        startActivity(intent.singleTop())//置于栈顶
        startActivity(intent.clearTop())//清空栈顶
        startActivity(intent.noHistory())//历史
        startActivity(intent.clearTask().newTask())//清除之后新建一个任务


④ 处理返回数据


页面跳转的多数情况是上一个页面传递请求参数给下一个页面,当然也有少数情况是上一个页面需要接受下一个页面的返回数据,此时Kotlin和Java一样都采取startActivityForResult方法,表示这次活动跳转要求处理返回信息。


Java

  @Override
    public void startActivityForResult(Intent intent, int requestCode) {
        super.startActivityForResult(intent, requestCode);
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
    }

Kotlin

  override fun startActivityForResult(intent: Intent?, requestCode: Int) {
        super.startActivityForResult(intent, requestCode)
    }
    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
    }


相关文章
|
1月前
|
Java 开发工具 Android开发
Kotlin语法笔记(26) -Kotlin 与 Java 共存(1)
本系列教程笔记详细讲解了Kotlin语法,适合需要深入了解Kotlin的开发者。若需快速学习Kotlin,建议查看“简洁”系列教程。本期重点介绍了Kotlin与Java的共存方式,包括属性、单例对象、默认参数方法、包方法、扩展方法以及内部类和成员的互操作性。通过这些内容,帮助你在项目中更好地结合使用这两种语言。
45 1
|
3天前
|
安全 Java 编译器
Kotlin教程笔记(27) -Kotlin 与 Java 共存(二)
Kotlin教程笔记(27) -Kotlin 与 Java 共存(二)
10 2
|
22天前
|
安全 Java 编译器
Kotlin教程笔记(27) -Kotlin 与 Java 共存(二)
Kotlin教程笔记(27) -Kotlin 与 Java 共存(二)
|
22天前
|
Java 开发工具 Android开发
Kotlin教程笔记(26) -Kotlin 与 Java 共存(一)
Kotlin教程笔记(26) -Kotlin 与 Java 共存(一)
|
22天前
|
Java 编译器 Android开发
Kotlin教程笔记(28) -Kotlin 与 Java 混编
Kotlin教程笔记(28) -Kotlin 与 Java 混编
|
28天前
|
安全 Java Android开发
Kotlin为什么没有Java流行
Kotlin流行不起来的原因
100 1
|
8天前
|
Java 开发工具 Android开发
Kotlin教程笔记(26) -Kotlin 与 Java 共存(1)
Kotlin教程笔记(26) -Kotlin 与 Java 共存(1)
17 0
|
1月前
|
Java 编译器 Android开发
Kotlin语法笔记(28) -Kotlin 与 Java 混编
本系列教程详细讲解了Kotlin语法,适合需要深入了解Kotlin的开发者。对于希望快速学习Kotlin的用户,推荐查看“简洁”系列教程。本文档重点介绍了Kotlin与Java混编的技巧,包括代码转换、类调用、ProGuard问题、Android library开发建议以及在Kotlin和Java之间互相调用的方法。
22 1
|
1月前
|
安全 Java 编译器
Kotlin语法笔记(27) -Kotlin 与 Java 共存(二)
本教程详细讲解Kotlin语法,适合希望深入了解Kotlin的开发者。若需快速入门,建议查阅“简洁”系列教程。本文重点探讨Kotlin与Java共存的高级话题,包括属性访问、空安全、泛型处理、同步机制及SAM转换等,助你在项目中逐步引入Kotlin。
24 1
|
1月前
|
Java 编译器 Android开发
Kotlin语法笔记(28) -Kotlin 与 Java 混编
Kotlin语法笔记(28) -Kotlin 与 Java 混编
26 2
下一篇
无影云桌面