Activity数据传递详解

Android Activity数据传递6种方案详解 在Android开发中,组件间通信是构建复杂应用的基础能力。Activity作为核心UI组件,其数据传递机制通过Intent实现进程内通信,底层基于Binder IPC机制。从技术演进角度看,数据序列化方案从Java标准的Serializable发展到Android专属的Parcelable,性能提升达3倍以上。现代架构中,ViewModel结合LiveData实现了生命周期感知的数据共享,而Activity Result API则优化了回调模式。这些技术在电商商品跳转、社交会话传递等场景中广泛应用,其中P 阅读详情
唉,好久都没有写过博客了。真的是太懒了。最近在看《Android权威编程指南》,挺不错的一本书,感觉里面有很多开发规范,是很值得一看的一本书。
  • 感觉在工作中经常处理Activity之间的数据传递,通常我们都是只用(以前我是的)startActivity(),但是看一些别人的代码中经常用到startActivityForResult()。当时就是感觉很高大上的样子,然后一直不太清楚里面的具体到底是干什么的。但是我看了上面的一本书之后就比较明白了。so,我就想写一篇博客把他们之间的关系写清楚,当然也为下一篇博客打一下基础。
  • 先说一下应用场景吧,有时候我们会从Activity1跳转到Activity2之后,还需要从Activity2中拿到一些处理后的数据那怎么办呢?
    • 通常,以前的我肯定会想,这不是很简单吗?再从Activity2直接调用startActivity跳转到Activity1不就行了嘛,我以前也是这样做的(┬_┬),当然这个方法是可以解决这样的问题的,但是现在我就是觉得这样的方法很low,所以startActivityForResult(),setResult(),onActivityResult()这三个方法就很好解决上面的问题。
    • 下面说一下用法:首先在Activity1中调用startActivityForResult()方法,其实这个是比startActivity()更为高级。现在先看一下Activity的跳转的代码,startActivityForResult()会比startActivity多一个参数,第二个参数叫做请求代码,请求代码是先发送给子Activity,然后再返回给父Activity的的整数值。如果在Activity1中只跳转一个Activity的话,是没有用的,但是跳转多个Activity的时候就可以区分不同类型的Activity。
Intent intent=SetActivity.newIntent(StartActivity.this,true);
startActivityForResult(intent,REQUEST_CODE_CHAT);
  • 当从Activity1跳转到Activity2的时候,需要调用setResult()方法,需要传入两个参数,第一个返回码的值int类型的,第二个参数是Intent类型。一般来说第一个参数可以是一下任意的一个预定义常量:Activity.REUSLT_OK 或者 Activity.RESULT_CANCELED。当然这两个有什么区别呢,当然是有区别的。我们从REUSLT后面就可以猜到,如果没有调用setResult()方法的情况下,用户按了后退按钮,Activity1则会收到收到 Activity.RESULT_CANCELED的结果代码。一般情况下都是填Activity.REUSLT_OK这个code值。
 Intent data=new Intent();
 data.putExtra(EXTRA_SHOW,isAnswerShown);
 //这里可以设置也可以不用设置。要看具体的返回值
 setResult(RESULT_OK,data);
  • 当从Activity2返回到Activity1的时候。需要在Activity1中添加 onActivityResult()回调方法。onActivityResult()中有三个参数,第一个参数requestCode叫做请求值,就是从Activity1中跳转到Activity2中在startActivityForResult()中设置的第二个参数的值。第二个参数resultCode叫做结果值,就是从Activity2中跳转到Activity1中在setResult()中设置的第一个参数的值。最后一个参数data,就是跳转过来传递的值喽。(感觉是不是有点晕)
 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//        super.onActivityResult(requestCode, resultCode, data);
        if(resultCode != Activity.RESULT_OK){
            return;
        }
        //如果只有一个Activity跳转的话,这个判断可以不用写
        if(REQUEST_CODE_CHAT == requestCode){
        if(data==null) return;
            isTure=SetActivity.wasAnswerShown(data);
            Toast.makeText(this,"回来的结果"+isTure,Toast.LENGTH_SHORT).show();
        }

    }
  • 首先判断一下:resultCode 的值是否和在Activity2中setResult()的值是否一样。如果不一样的就returned。如果有多个Activity跳转的话,这里就可以用requestCode用来区分是从那个Activity跳转过来的。最后就可以从data中取值了。下面贴一下俩个Activity的全部代码

第一个Activity,就是我说的Activity1

package zhan.com.typeview.simaple.intent;

import android.app.Activity;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

import zhan.com.typeview.R;

/**
 * @date 创建时间: 2017/11/12 0012 16:25
 * @author zh_legend
 * @Description 跳过去的Activity
 * @Email code_legend@163.com
 * @Version 1.0
 */
public class StartActivity extends AppCompatActivity {

    //响应码
    private  static  final int REQUEST_CODE_CHAT=0;
    //得到的返回值
    private boolean isTure;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_start);
    }
    public void jump(View v){
        Intent intent=SetActivity.newIntent(StartActivity.this,true);
        startActivityForResult(intent,REQUEST_CODE_CHAT);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//        super.onActivityResult(requestCode, resultCode, data);
        if(resultCode != Activity.RESULT_OK){
            return;
        }
        //如果只有一个Activity跳转的话,这个判断可以不用写
        if(REQUEST_CODE_CHAT == requestCode){
            if(data==null) return;
            isTure=SetActivity.wasAnswerShown(data);
            Toast.makeText(this,"回来的结果"+isTure,Toast.LENGTH_SHORT).show();
        }

    }
}

第二个Activity,就是我说的Activity2

package zhan.com.typeview.simaple.intent;

import android.content.Context;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;

import zhan.com.typeview.R;

import static android.icu.lang.UCharacter.GraphemeClusterBreak.T;
/**
 * @date 创建时间: 2017/11/12 0012 16:24
 * @author zh_legend
 * @Description  返回过去的
 * @Email code_legend@163.com
 * @Version 1.0
 */
public class SetActivity extends AppCompatActivity {

    //返回的结果
    private static final String EXTRA_IS_TRUE="zhan.com.typeview.simaple.intent.is_true";

    private static final String EXTRA_SHOW="zhan.com.typeview.simaple.intent.show";

    //跳转得到的结果
    private boolean isAnsTrue;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_set);
        Intent intent = getIntent();
        isAnsTrue=intent.getBooleanExtra(EXTRA_IS_TRUE,false);
        Toast.makeText(this,"跳转过来的结果"+isAnsTrue,Toast.LENGTH_SHORT).show();
        setAnswerShowResult(false);
    }

    public static Intent newIntent(Context packageContext,boolean answerIsTrue){
        Intent intent=new Intent(packageContext,SetActivity.class);
        intent.putExtra(EXTRA_IS_TRUE,answerIsTrue);
        return intent;
    }

    public static boolean wasAnswerShown(Intent result){
        return result.getBooleanExtra(EXTRA_SHOW,false);
    }

    private void setAnswerShowResult(boolean isAnswerShown){
        Intent data=new Intent();
        data.putExtra(EXTRA_SHOW,isAnswerShown);
        //这里可以设置也可以不用设置。要看具体的返回值
        setResult(RESULT_OK,data);
    }


}
  • 最后总结一下,感觉里面的代码有很多借鉴支持,首先是Activity之间跳转,我们一般都是写到第一个Activity中的,但是作者的写法却写到了需要跳转的Activity里面,感觉这种思想真的挺不错。最直观的好处就是数据传递的时候参数不容易出错。

好了,就这样吧。

Android Activity之间相互调用与传递参数的原理与用法分析 主要介绍了Android Activity之间相互调用与传递参数的原理与用法,较为详细的分析了Android组件的构成以及Activity的创建、调用、切换等相关操作技巧,需要的朋友可以参考下 立即下载

相关推荐

库卡机器人负载设置和自动负载测算

1.1在专家或者以上的权限下—“投入运行”——“工具/基座标管理”—“工具/工件”—添加1.2根据当前的工具所在的tool选择指定工具号;若是没有建立tool需要先建立建立方法看1.3负载数据的填写质量:抓手自重+产品重量总和(需要小于额定负载值)X、Y、Z :总质量的重心位置(基于法兰盘中心的位置计算,如下图的X_FLANGE、Y_FLANGE、Z_FLANGE)【此数据可以根据仿真或者CAD数据得出】A、B、C:是总质量绕着法兰盘中心所安装的角度位置 【此数据可以根据仿真或者CAD数据得出】

weixin_43462131的博客 3117

Android中Activity之间传递数据详解

Activity之间传递数据一般有两大种方式:1、通过Intent结合Bundle传递数据 2、只使用Intent传递数据     下面通过一个例子来演示两种方式的实现,MainActivity代码如下:         该MainActivity界面布局很简单,只有一个按钮button用于点击跳转到另一个Activity即MyActivity,在MainActivity的最后我们定义了P

whatever9527的博客 946

Ubuntu22.04下3分钟搞定GitHub加速:SwitchHosts+小鱼工具保姆级配置指南

本文提供Ubuntu22.04下快速解决GitHub下载超时问题的保姆级教程,通过SwitchHosts图形化工具和小鱼一键换源工具实现高效加速。详细步骤包括环境准备、工具安装配置及验证方法,帮助开发者轻松优化GitHub访问速度,提升工作效率。

weixin_29258297的博客 566

android基础学习-android篇day17-Activity之间数据传递方式

转:https://blog.youkuaiyun.com/qq_35521087/article/details/51922523 转:https://blog.youkuaiyun.com/lplj717/article/details/51209658 Activity之间数据传递方式  1)单向传值:A传值给B,但不需要B返回数据 A: //传入数据给B Intent i = new Intent(A...

犟驴的博客 345

PHP证书图片生成

$realname = "姓名"; $schoolname = "学校"; $idcard = "身份证号"; $image = imagecreatefrompng('certification.png'); // 证书模版图片文件的路径 $red = imagecolorallocate($image,00,00,00); // 字体颜色

4036

华为eNSP与VMware虚拟机联动实战:从零搭建仿真网络环境

本文详细介绍了如何从零开始搭建华为eNSP与VMware虚拟机的联动仿真网络环境。通过环境准备、网络适配器配置、eNSP与VMware网络集成、安全策略与NAT配置等步骤,帮助读者掌握构建企业级网络实验场景的关键技术。这种组合特别适合网络工程师进阶训练和华为认证考试准备,实现低成本、高灵活性的网络仿真实验。

weixin_30415113的博客 504

Activity三种数据的传递方式

新建APP实现在Activity之间传递数据的方法,从第一个界面使用putExtra方法传递数据(跳转)至第二个界面;从第一个界面使用Bundle方法传递数据(跳转)至第三个界面;从第四个界面使用传递数据至第一个界面,使用startActivityForResult方法。

qq_57179318的博客 1434

但是我如果真的用差速轮去控制转向 为了尽量原地旋转 转向角度精确 我应该怎么去配置左右两个轮子的速度呢

目标实现方式原地转向左右轮速度相等、方向相反精确角度用 IMU 检测 yaw 实时对齐停止判断达到目标 yaw ± 容差时立即停转控制方式状态机(idle → turning → done)推荐容差2°~3° (可根据实际调整)

qqqweiweiqq的博客 314

Activity之间的数据传输的4种方法

Activity之间的数据传输的4种方法 Intent传递数据 这是一种官方推荐的传输方式。比如,你在A这个Activity上拿到一坨用户输入的文本信息,兴高采烈的想把它放到B这个Activity上展示并发送,一个很可行的方式,是通过Intent的putExtra接口,把用户输入的那些字符信息,按照key/value的形式放进Intent,传输到B这个Activity上。Intent intent

qq_21184657的专栏 1185

YOLOv11改进 - 卷积Conv | PConv(Pinwheel-shaped Conv): 风车状卷积用于红外小目标检测 | AAAI 2025

本文介绍了风车状卷积(PConv)和基于尺度的动态(SD)损失在YOLOv11中的结合应用。PConv采用不对称填充,通过特殊结构设计、卷积运算和分组卷积技术,能更好地适应红外小目标的像素高斯空间分布,在少量增加参数的情况下极大扩展感受野。SD损失可根据目标大小动态调整尺度和位置损失的影响。我们将PConv集成到YOLOv11的主干网络低层,并在相关配置文件中进行设置。实验证明,YOLOv11 - PConv在IRSTD - 1K和SIRST - UAVB数据集上取得显著性能提升,验证了方法的有效性和泛化能

魔改工程师的博客 1335

SAP-ABAP:SAP Open SQL 分页技术深度解析:语法、性能陷阱与最佳实践

SAP Open SQL 分页技术深度解析:语法、性能陷阱与最佳实践

baidu_35680696的博客 636

Activity详解二 activity数据传递

先看效果图: 1.Bundle类的作用   Bundle类用作携带数据,它类似于Map,用于存放key-value名值对形式的值。相对于Map,它提供了各种常用类型的putXxx()/getXxx()方法,如:putString()/getString()和putInt()/getInt(),putXxx()用于往Bundle对象放入数据,getXxx()方法用

androidWuYou的博客 766

CAPL诊断功能实现

UDS(Unified Diagnostic Services)是一种用于汽车电子系统诊断的标准协议。它定义了一系列诊断服务,用于读取和写入车辆电子控制单元(ECU)中的数据,以及处理诊断故障码(DTC)。UDS协议通常运行在CAN总线上,使用ISO 15765-2(ISO-TP)协议进行数据传输。通过本文的学习,读者应该对CAPL诊断功能实现有了初步的了解,并能够编写复杂的CAPL脚本。在实际项目中,CAPL的应用非常广泛,希望读者能够通过不断的学习和实践,掌握更多的CAPL技巧,提高自己的开发能力。

闲人编程的博客 1517

Activity之间传递数据的三种方式详解

Activity:一、什么是Activity? 简单的说:Activity就是布满整个窗口或者悬浮于其他窗口上的交互界面。在一个应用程序中通常由多个Activity构成,都会在Manifest.xml中指定一个主的Activity,如下设置<actionandroid:name="android.intent.action.MAIN" />当程序第一次运行时用户就会看这个Activity,这

。 3271

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Android SharedPreferences 详解及activity之间如何传递数据、开关控制

Android SharedPreferences 详解及activity之间如何传递数据、开关控制

fancynthia的博客 6095

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Activity详解数据传递以及隐式Intent启动

数据传递 简单数据intent.putExtra(key , value);----------------------------Intent intent = getIntent(); intent.getXXXExtra(key); // xxx ---- 指的是早前传递的数据类型复杂数据Serializable 这是一个空的接口,只要让javaBean实现这个接口即可,那么就可以传递对象到下

HappyAndroidi的博客 1150

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

android activity切换 数据传递,详解Android Activity之间切换传递数据的方法

前面照着android系统的裁剪图片的功能自己写了一个相似的工具。功能是大体上实现了,但留下了一个调用的问题:如何从我的程序调用这个裁剪工具,并且获得裁剪后的图片呢?其实这个也很简单了,就是intent的基础用法。先上个图(界面依旧没优化,难看就难看吧):起始activity,打开图片选择窗口,随便选择一张图片下面是跳转到裁剪界面按下crop按钮,退出activity,回到原来界面,并显示裁剪后的...

weixin_39859128的博客 380

android数据传递的代码,Android开发必看-详解Activity之间的数据传递

Activity单向数据传递下面的;例子演示了从 OriginActivity activity 传递字符串“some data!” 到DestinationActivity activity.注:这是两个活动之间发送数据的最直接的方法。直接上代码(简单粗暴直接代码示例!)OriginActivitypublic class OriginActivity extends AppCompatActi...

weixin_35625324的博客 304

android studio 跳转后保留原页面数据_Intent详解以及Activity的跳转与数据传递

在上一次讲述Activity的时候,还有一个非常重要且常用的知识点没有讲,就是不同Activity之间的跳转和数据传递。我们在平常在使用app应用的时候,Activity的跳转和数据传递是经常会接触到。基本上每一款app都会有,除非这个应用只有一个界面。例如,我现在要做一款通讯app,当我在通讯录界面(假设为ContactActivity)点击其中的一个联系人,此时就会跳转到该联系人的详情界面(假...

weixin_39996035的博客 2433

Activity生命周期,数据传递,启动模式详解

Activity相关包括Activity的生命周期详解,Activity之间的数据传递,启动模式等。

Coding... 617

Android四大组件详解之Activity数据传递及回传(初级)

内容:Activity数据传递及回传 功能: 注册后,将注册信息显示在另一个页面(数据传递) 重新封装一个工具类,通过数据回传将数值加给基础数据(数据回传) 用到的知识点: 页面的跳转 页面间数据的传递 页面数据的回传 MainActivity <LinearLayout android:id="@+id/layout" android:...

不会游泳的程序猿 3270

android 界面传递数据库,解析activity之间数据传递方法的详解

1 基于消息的通信机制 Intent--------boudle,extra用这种简单的形式,一般而言传递一些简单的类型是比较容易的,如int、string等详细介绍下Intent机制Intent包含两部分:1 目的【action】-------要去到哪里去2 内容【category、data】----------路上带些什么,区分性数据和内容性数据简单数据传递:Intent intent = ...

weixin_34708601的博客 338

android bundle存放数据详解,activity与activity之间数据传递,fragment与fragment之间数据传递

 1、正如大家所知道,Activity之间传递数据,是将数据存放在Intent或者Bundle中 例如:将数据存放倒Intent中传递: 将数据放到Bundle中传递: 但是Intent或者Bundle存放的数据类型是有限的 我想大家都遇到过这个问题,无法将Map、List>等类型数据存放到Bundle或者Intent中 但是大家是否注意到,Bundle或者Intent

jonbb的博客 920

解析activity之间数据传递方法的详解

转自:http://www.jb51.net/article/37227.htm 本篇文章是对activity之间数据传递的方法进行了详细的分析介绍,需要的朋友参考下 1 基于消息的通信机制 Intent--------boudle,extra用这种简单的形式,一般而言传递一些简单的类型是比较容易的,如int、string等详细介绍下Intent机制Intent包含两部分:1 目...

weixin_30736301的博客 220

action跳转后script失效_Intent详解以及Activity的跳转与数据传递

在上一次讲述Activity的时候,还有一个非常重要且常用的知识点没有讲,就是不同Activity之间的跳转和数据传递。我们在平常在使用app应用的时候,Activity的跳转和数据传递是经常会接触到。基本上每一款app都会有,除非这个应用只有一个界面。例如,我现在要做一款通讯app,当我在通讯录界面(假设为ContactActivity)点击其中的一个联系人,此时就会跳转到该联系人的详情界面(假...

weixin_27875131的博客 231

Activity详解(生命周期,启动方式,数据传递,任务栈等)

一、Activity的本质   Activity是Android组件中最基本也是最为常见用的四大组件之一。Activity是一个应用程序组件,提供一个屏幕,用户可以用来交互为了完成某项任务。   Activity中所有操作都与用户密切相关,是一个负责与用户交互的组件,可以通过setContentView(View)来显示指定控件。   在一个android应用中,一个Activity通常就是一

Godwin_YQ的博客 877
上一篇: Android中LeakCanary检测内存泄漏
下一篇: 更好用的DialogFragment
Code_legend
博客等级 码龄10年 33粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值