• Android Activity间跳转与传递数据


    1 概述

    Activity之间的跳转主要使用

    startActivity(Intent intent);
    startActivityForResult(Intent intent,int requestCode);
    

    这两个函数,传递数据的话利用Intent进行传递,负责数据需要配合Bundle使用。这篇文章讲述了如何利用这两个函数在Activity之间的跳转以及传递数据。

    2 Activity间跳转

    2.1 直接跳转

    这里有两个ActivityFirstActivitySecondActivity,从FirstActivity中跳转到SecondActivity中只需要一个startActivity()即可:

    startActivity(new Intent(this,SecondActivity.class));
    

    一般需要在SecondActivity中加上finish()函数,表示这个Activity结束,比如这里直接在SecondActivity的按钮事件里面加上了finish()

    在这里插入图片描述

    在这里插入图片描述

    2.2 回调

    很多情况下需要在FirstActivity跳转到SecondActivity后,在SecondActivity进行相应的操作,如更新数据之类,然后返回FirstActivity,通知FirstActivity执行某些操作,这时候就需要使用startActivityForResult()

    startActivityForResult有两个参数,一个是Intent,表示将要跳转的Activity,一个是requestCode,表示请求码,用于调用ActivityonActivityResult()函数。

    FirstActivity中:

    startActivityForResult(new Intent(this,SecondActivity.class),11);
    

    这里11就是请求码,然后在SecondActivity中,使用setResult()函数:

    setResult(22,new Intent().putExtra("str","from second activity"));
    

    setResult()接受两个参数,第一个参数表示resultCode,从这个SecondActivity返回的结果码,另一个Intent,表示要返回给FirstActivity的数据。

    最后在FirstActivity中重载onActivityResult()

    在这里插入图片描述

    onActivityResult中判断请求码与结果码后进行相应操作。

    在这里插入图片描述

    3 Activity间传递数据

    3.1 传递普通数据

    传递普通类型的数据直接使用IntentputExtra()即可,putExtra接受两个参数,第一个是一个String,表示键,第二个是值,类型可以是bytecharshortlong等基本类型与这些基本类型组成的数组,当然String也可以。

    在这里插入图片描述

    比如在FirstActivity中,传递数据给SecondActivity

    在这里插入图片描述

    然后在SecondActivity中使用getIntent()获取Intent后,再从里面获取数据:

    在这里插入图片描述

    如果想从SecondActivity中返回数据给FirstActivity,也就是从被调用的Activity中返回数据,可以使用前面介绍过的setResult()方法。

    其中第二个参数是一个用于存储数据的Intent,把数据put进去即可。

    在这里插入图片描述

    最后记得在onActivityResult做相应的判断处理:

    在这里插入图片描述

    在这里插入图片描述

    3.2 传递一组数据

    当数据的种类变多时,比如混合了intStringbytechar等,可以对逐个类型使用putExtra(),但更好的方法是使用Bundle

    Bundle的使用与Intent类似,也是对于不同的类型采用键值对的添加方法,直接putXXX:

    在这里插入图片描述

    数据添加完毕之后,在intent中使用putExtras(bundle)

    在这里插入图片描述

    然后就可以在SecondActivity中接收数据了。

    首先需要使用getIntent().getExtras()获取Bundle,再获取里面的数据。

    在这里插入图片描述

    注意一下获取到的Bundle有可能为null,取数据前需要判断一下。

    在这里插入图片描述

    3.3 传递对象

    如果想要传递的数据是一个对象怎么办?难道对每一个属性都使用getter再放进去吗?

    并不是,Bundle提供了一个处理序列化对象的方法:

    在这里插入图片描述

    只要对象实现了Serializable,就可以被Bundle处理,比如这里有一个测试类Student

    在这里插入图片描述

    然后在FirstActivity中直接new一个,并使用BundleputSerializable即可。

    在这里插入图片描述

    接着再SecondActivity中通过Intent取出Bundle后,使用其中的getSerializable()取出对象,最后使用强制类型转换:

    在这里插入图片描述

    在这里插入图片描述

    4 源码

  • 相关阅读:
    基于Taro开发小程序笔记--07修改state的任意数据
    基于Taro开发小程序笔记--06Taro框架生命周期
    基于Taro开发小程序笔记--05小程序图片放大组件
    基于Taro开发小程序笔记--04路由跳转的几种方式
    基于Taro开发小程序笔记--03项目API处理
    基于Taro开发小程序笔记--02项目结构梳理
    基于Taro开发小程序笔记--01开发前准备
    2018年那些事
    Css Sticky footer布局
    背景图毛玻璃效果
  • 原文地址:https://www.cnblogs.com/6b7b5fc3/p/12716210.html
Copyright © 2020-2023  润新知