activity 点击后传递数据给fragment_Android Activity间跳转与传递数据

1 概述

Activity之间的跳转主要使用

startActivity

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

2 Activity间跳转

2.1 直接跳转

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

startActivity

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

e542f3820acf26d35cec62350d985615.png

3702575fe33f0695b797a3c4fa7ef7cf.gif

2.2 回调

很多情况下需要在FirstActivity跳转到SecondActivity后,在SecondActivity进行相应的操作,如更新数据之类,然后返回FirstActivity,通知FirstActivity执行某些操作,这时候就需要使用startActivityForResult(). startActivityForResult有两个参数,一个是Intent,表示将要跳转的Activity,一个是requestCode(int类型),表示请求码,用于调用Activity的onActivityResult()函数. 如FirstActivity中:

startActivityForResult

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

setResult

setResult()接受两个参数,第一个参数表示resultCode,从这个SecondActivity返回的结果码,另一个Intent,表示要返回给FirstActivity的数据. 最后在FirstActivity中重载onActivityResult():

5969c9f7b803c6addf1aeaf78d150a43.png

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

297732467832ae6e202b1258e9f46457.gif

3 Activity间传递数据

3.1 传递普通数据

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

f8d301d70ff3d4876f62e16624907c79.png

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

e6fa63797a0135398f815955585aa15d.png

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

b0155c9dfde9c77e6767f5e51fe2458b.png

如果想从SecondActivity中返回数据给FirstActivity,也就是从被调用的Activity中返回数据,可以使用前面介绍过的setResult()方法. 其中第二个参数是一个用于存储数据的Intent,把数据put进去即可.

3139f55c83ee1bc77c98d40e62e0db2b.png

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

c4f2dfae85c284ad1be73998e21cba3b.png

537358812e3d138c9ab0bfc5df0d38ec.gif

3.2 传递一组数据

当数据的种类变多时,比如混合了int,String,byte,char等,可以对逐个类型使用putExtra(),但更好的方法是使用Bundle. Bundle的使用与Intent类似,也是对于不同的类型采用键值对的添加方法,直接putXXX:

83b7952a558ff53b5c7b93e240baae2c.png

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

5ba1aa3fdc72b7753c95548ea538c12a.png

然后就可以在SecondActivity中接收数据了. 首先需要使用getIntent().getExtras()获取Bundle,再获取里面的数据.

1d102362465e3085e3c9f5a3b8cac8ae.png

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

a648dd344ea982b7bedfe2eb71b883bf.gif

3.3 传递对象

如果想要传递的数据是一个对象怎么办?难道对每一个属性都使用getter再放进去吗? 并不是,Bundle提供了一个处理序列化对象的方法:

e876aa4b396c5c41338678623aeb8f78.png

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

1b79dad39ca5512234f60cf590a4ea0a.png

然后在FirstActivity中直接new一个,并使用Bundle的putSerializable即可.

1a08f52604d32f4535e29ada3b03b52a.png

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

d664af10ac022b94ccfa1f4689fb7b1f.png

2c7113235a575a8c30aff3e2c228bd78.gif

4 源码

github 码云

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值