Android开发基础:Activity之间的跳转 向下一个Activity传递数据 给上一个Activity返回数据

本文主要是介绍Android开发基础:Activity之间的跳转 向下一个Activity传递数据 给上一个Activity返回数据,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一,使用Intent在Activity之间跳转

1.显示使用Intent

2.隐式使用Intent

二,携带数据的跳转

1.Bundle

三,返回数据给上一个Activity

1.registerForActivityResult


一,使用Intent在Activity之间跳转

        一个Android应用中包含多个Activities,Activity之间必然存在跳转关系。在Android中,Activity之间的跳转是借助Intent对象来实现的。intent是Android中各组件之间进行交互的一种重要方式,它不仅可以指明当前组件想要执行的动作,还可以在不同组件之间传递数据。Intent一般可用于启动Activity,Service,以及发送广播等场景。Intent的使用大致可分为两种:显示Intent隐式Intent

1.显示使用Intent

显示Intent,即明确地指明想要跳转的Activity,使用步骤如下:

  1. 创建Intent对象;
  2. 使用setClass()方法设置请求目的地,需要传入两个参数:上下文和目标Activity的Class对象;
  3. 使用putExtra()方法添加数据,需要传入两个参数:key值(用于取出数据)和数据value;
  4. 使用startActivity()方法发送请求(启动新的Activity);
//1.创建intent对象
Intent intent = new Intent();
//2.设置跳转目的地
intent.setClass(this, SecondActivity.class);
//3.封装数据(可以没有)
intent.putExtra("msg", "页面跳转成功!");
//4.开启跳转
startActivity(intent);

2.隐式使用Intent

        显示Intent使用直接指定Activity的方式条状,而隐式Intent相当于是根据一些条件过滤出最合适的Activity,没有明确的意图,所以是“隐式”。这里的条件包括actioncategorydate等,系统分析Intent时,只有这几个条件都匹配时,Activity才会响应Intent。既然是根据条件过滤,那么必定会出现多个Activity都符合条件的情况,这时系统会弹出一个对话框让你选择想要跳转的Activity。

隐式Intent使用步骤如下:

(1)在AndroidManifest.xml中给Activity添加过滤条件action和category;

<activityandroid:name=".SecondActivity"android:exported="true" ><intent-filter><action android:name="android.intent.action.ACTION_START"/><category android:name="android.intent.category.DEFAULT"/></intent-filter>
</activity>

(2)构造Intent,指定过滤条件,这里并没有指定category条件,因为我们给Activity添加的是默认的category,调用startActivity()方法时会自动给Intent添加这个category。每个Intent只能指定一个action,但能指定多个category;

Intent intent = new Intent("android.intent.action.ACTION_START");
startActivity(intent);

二,携带数据的跳转

1.Bundle

        intent可以通过putExtra()方法添加一些简单数据,如果想要携带一些复杂数据,可以借助Bundle实现。Bundle在Android中主要用于传递数据,相当于对数据又做了一层封装,需要注意的是当Bundle传递的数据是对象时,这个对象必须是可序列化的。

Bundle使用步骤如下:

(1)创建Bundle对象,封装数据;

//实现了Serializable接口的Student类
Student student = new Student("喜多郁代","114514",14);
//创建Bundle对象,将信息封装到Bundle中
Bundle bundle = new Bundle();
bundle.putSerializable("stu", student);

(2)将Bundle对象添加到Intent对象中;

//将bandle封装到intent中
Intent intent = new Intent();
intent.putExtra("msg", bundle);
//显示设置跳转意图
intent.setClass(this, ThirdActivity.class);
startActivity(intent);

(3)在指定跳转的Activity获取Bundle;

//1.获取intent
Intent intent = getIntent();
//2.获取Bundle
Bundle bundle = intent.getBundleExtra("msg");
//3.获取学生对象
Student student = (Student)bundle.getSerializable("stu");

三,返回数据给上一个Activity

1.registerForActivityResult

        我们已经知道了如何从一个Activity跳转到另一个Activity,如果我们想要返回上一个Activity的话,按一下返回键Back即可,这时屏幕上的Activity会被销毁。请不要再次创建一个Intent然后调用startActivity方法,因为这样只会再次创建出一个Activity,并没有真正返回上一个Activity。

如果想要返回时给上一个Activity返回数据,可以使用registerForActivityResult方法。定义如下:

public final <I, O> ActivityResultLauncher<I> registerForActivityResult(@NonNull ActivityResultContract<I, O> contract,@NonNull ActivityResultCallback<O> callback) {return registerForActivityResult(contract, mActivityResultRegistry, callback);
}

基本使用:

(1)使用registerForActivityResult获取launcher;

//获取launcher
launcher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(),new ActivityResultCallback<ActivityResult>() {@Overridepublic void onActivityResult(ActivityResult result) {//获取跳转Activity返回的数据switch (result.getResultCode()){ //resultCode在跳转Activity设置case 1:Intent intent = result.getData();break;}}}
);

(2)显式使用Intent,并使用launcher启动;

Intent intent = new Intent();
intent.setClass(FirstActivity.this, FourthActivity_name.class);
launcher.launch(intent);

(3)在跳转Activity处获取Intent,并使用setResult返回;

//获取上一个Activity传过来的intent
Intent intent = getIntent();//设置返回的Intent
Intent back_intent = new Intent();
intent.setClass(this, FirstActivity.class);
//使用setResult返回,设置resultCode并传入要返回的intent
setResult(1, back_intent);
//关闭当前Activity
FourthActivity_name.this.finish();

这篇关于Android开发基础:Activity之间的跳转 向下一个Activity传递数据 给上一个Activity返回数据的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/915909

相关文章

Java利用JSONPath操作JSON数据的技术指南

《Java利用JSONPath操作JSON数据的技术指南》JSONPath是一种强大的工具,用于查询和操作JSON数据,类似于SQL的语法,它为处理复杂的JSON数据结构提供了简单且高效... 目录1、简述2、什么是 jsONPath?3、Java 示例3.1 基本查询3.2 过滤查询3.3 递归搜索3.4

MySQL大表数据的分区与分库分表的实现

《MySQL大表数据的分区与分库分表的实现》数据库的分区和分库分表是两种常用的技术方案,本文主要介绍了MySQL大表数据的分区与分库分表的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录1. mysql大表数据的分区1.1 什么是分区?1.2 分区的类型1.3 分区的优点1.4 分

Mysql删除几亿条数据表中的部分数据的方法实现

《Mysql删除几亿条数据表中的部分数据的方法实现》在MySQL中删除一个大表中的数据时,需要特别注意操作的性能和对系统的影响,本文主要介绍了Mysql删除几亿条数据表中的部分数据的方法实现,具有一定... 目录1、需求2、方案1. 使用 DELETE 语句分批删除2. 使用 INPLACE ALTER T

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

C#基础之委托详解(Delegate)

《C#基础之委托详解(Delegate)》:本文主要介绍C#基础之委托(Delegate),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 委托定义2. 委托实例化3. 多播委托(Multicast Delegates)4. 委托的用途事件处理回调函数LINQ

Redis 中的热点键和数据倾斜示例详解

《Redis中的热点键和数据倾斜示例详解》热点键是指在Redis中被频繁访问的特定键,这些键由于其高访问频率,可能导致Redis服务器的性能问题,尤其是在高并发场景下,本文给大家介绍Redis中的热... 目录Redis 中的热点键和数据倾斜热点键(Hot Key)定义特点应对策略示例数据倾斜(Data S

利用Python开发Markdown表格结构转换为Excel工具

《利用Python开发Markdown表格结构转换为Excel工具》在数据管理和文档编写过程中,我们经常使用Markdown来记录表格数据,但它没有Excel使用方便,所以本文将使用Python编写一... 目录1.完整代码2. 项目概述3. 代码解析3.1 依赖库3.2 GUI 设计3.3 解析 Mark

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

Vue中组件之间传值的六种方式(完整版)

《Vue中组件之间传值的六种方式(完整版)》组件是vue.js最强大的功能之一,而组件实例的作用域是相互独立的,这就意味着不同组件之间的数据无法相互引用,针对不同的使用场景,如何选择行之有效的通信方式... 目录前言方法一、props/$emit1.父组件向子组件传值2.子组件向父组件传值(通过事件形式)方

Python实现将MySQL中所有表的数据都导出为CSV文件并压缩

《Python实现将MySQL中所有表的数据都导出为CSV文件并压缩》这篇文章主要为大家详细介绍了如何使用Python将MySQL数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到... python将mysql数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到另一个