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

相关文章

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

解决pandas无法读取csv文件数据的问题

《解决pandas无法读取csv文件数据的问题》本文讲述作者用Pandas读取CSV文件时因参数设置不当导致数据错位,通过调整delimiter和on_bad_lines参数最终解决问题,并强调正确参... 目录一、前言二、问题复现1. 问题2. 通过 on_bad_lines=‘warn’ 跳过异常数据3

Android Paging 分页加载库使用实践

《AndroidPaging分页加载库使用实践》AndroidPaging库是Jetpack组件的一部分,它提供了一套完整的解决方案来处理大型数据集的分页加载,本文将深入探讨Paging库... 目录前言一、Paging 库概述二、Paging 3 核心组件1. PagingSource2. Pager3.

PyQt5 GUI 开发的基础知识

《PyQt5GUI开发的基础知识》Qt是一个跨平台的C++图形用户界面开发框架,支持GUI和非GUI程序开发,本文介绍了使用PyQt5进行界面开发的基础知识,包括创建简单窗口、常用控件、窗口属性设... 目录简介第一个PyQt程序最常用的三个功能模块控件QPushButton(按钮)控件QLable(纯文本

C#监听txt文档获取新数据方式

《C#监听txt文档获取新数据方式》文章介绍通过监听txt文件获取最新数据,并实现开机自启动、禁用窗口关闭按钮、阻止Ctrl+C中断及防止程序退出等功能,代码整合于主函数中,供参考学习... 目录前言一、监听txt文档增加数据二、其他功能1. 设置开机自启动2. 禁止控制台窗口关闭按钮3. 阻止Ctrl +

java如何实现高并发场景下三级缓存的数据一致性

《java如何实现高并发场景下三级缓存的数据一致性》这篇文章主要为大家详细介绍了java如何实现高并发场景下三级缓存的数据一致性,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 下面代码是一个使用Java和Redisson实现的三级缓存服务,主要功能包括:1.缓存结构:本地缓存:使

在MySQL中实现冷热数据分离的方法及使用场景底层原理解析

《在MySQL中实现冷热数据分离的方法及使用场景底层原理解析》MySQL冷热数据分离通过分表/分区策略、数据归档和索引优化,将频繁访问的热数据与冷数据分开存储,提升查询效率并降低存储成本,适用于高并发... 目录实现冷热数据分离1. 分表策略2. 使用分区表3. 数据归档与迁移在mysql中实现冷热数据分

C#解析JSON数据全攻略指南

《C#解析JSON数据全攻略指南》这篇文章主要为大家详细介绍了使用C#解析JSON数据全攻略指南,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、为什么jsON是C#开发必修课?二、四步搞定网络JSON数据1. 获取数据 - HttpClient最佳实践2. 动态解析 - 快速

基于Python开发一个图像水印批量添加工具

《基于Python开发一个图像水印批量添加工具》在当今数字化内容爆炸式增长的时代,图像版权保护已成为创作者和企业的核心需求,本方案将详细介绍一个基于PythonPIL库的工业级图像水印解决方案,有需要... 目录一、系统架构设计1.1 整体处理流程1.2 类结构设计(扩展版本)二、核心算法深入解析2.1 自

MyBatis-Plus通用中等、大量数据分批查询和处理方法

《MyBatis-Plus通用中等、大量数据分批查询和处理方法》文章介绍MyBatis-Plus分页查询处理,通过函数式接口与Lambda表达式实现通用逻辑,方法抽象但功能强大,建议扩展分批处理及流式... 目录函数式接口获取分页数据接口数据处理接口通用逻辑工具类使用方法简单查询自定义查询方法总结函数式接口