欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

安卓app开发中的intent传递数据理解之我见,如何理解安卓的intent数据传递(1)

程序员文章站 2022-07-15 17:04:31
...

安卓开发中经常遇到使用频率很高的家伙,例如 activity 、service、broadcast,contentprovider,桥梁工程师intent,应用保持着context等。这些东西对初学者来说可以说是一头雾水。今天我们来谈谈intent的知识。

intent意思"意图 用意",字面看不好理解。本身intent在安卓app中与界面显示无关的东西,也就是intent本身没有单独存在的意义。我们可以把它想象为无形桥梁,在app中大显身手,是app中无声工作者,向intent致敬!

我们知道,在玩弄app的时候,有很多界面的显示,比如启动一个app的时候会有个启动图界面1,然后倒计时后进入到了一个主界面(也可能是登录界面)。这个过程我们只知道界面切换了,其实背后intent在默默工作。

过程:界面1------通过intent启动----界面2

每个界面在安卓中被称为activity,因此 从一个activity启动另一个activity是intent的一个作用。说起由activity单独启动另一个activity,就有点光杆司令的味道,intent还有个携带礼物(数据参数)的功能。亲戚礼尚往来是常事,所以activity之间传递数据intent的基本功。说了一大堆,举个列子:

要想用intent,怎么地按照面向对象编程的思想,得造一个小哥出来,怎么造,是这样滴:

val intent = Intent(this, AnotherActivity::class.java) //kotlin中创建小哥不用new,两个参数很好理解,this代表了当前的activity, AnotherActivity代表了要启动的activty,简单吧,就这句话,出了一个名叫intent英雄小哥,这个小哥的作用就是要从this启动到another。

intent.putExtra(“key_from_main”, “data_from_main”) //小哥说:我出门要带礼物,去看another兄弟,于是乎就把数据通过自己办法putextra打包起来。但是带过去的礼物,对方要是看,就得打开礼物包,所以小哥还是很聪明的,每件礼物都标记了一个key,同时一个值标识什么礼物,对方去对标找礼物即可。小哥.putExtra(key,value)完毕。

startActivity(intent) //小哥说,我都准备好了,可以去another兄弟那里了。小哥做进车子startActivity一个启动,带到another那里了。startActivity()前面没有实例化对象的调用的,就是一个activity静态方法。小哥带来的数据,another兄弟非常高兴,很急切看看带了什么礼物,于是他得把礼物包打开:这是another兄弟要做的事,当然要编码在another兄弟的activity里。而且another兄弟很爱财,出生之时就要有这个拿礼物的功能。在 onCreate() 中接收。

val data = getIntent().getStringExtra(“key”) // intent小哥很受欢迎,专门有人接待,通过getIntent()找到intent小哥。然后毫不客气的从小哥那里取礼物。key就是小哥做的标记,礼物蛮简单的,小礼物哈哈。

把上面代码汇集一下:

当前activity中代码:

val intent = Intent(this, AnotherActivity::class.java)

intent.putExtra(“key_from_main”, “data_from_main”)

startActivity(intent)

anotherActivity oncreate方法里

val data = getIntent().getStringExtra(“key”)

这样小哥就完成了串门的事。

但是上面代码中,小哥做的车是startActivity(),这个车子有个毛病,只能带着小哥礼物出去,不能带礼物回来,也就是不能从another那里带回数据。小哥可能不高兴,我不做你这车子,我要带点东西回来,于是乎,换车子:startActivityForResult(intent , 100) 字面意思就是 一个有结果的车子。

val intent = Intent(this, AnotherActivity::class.java)

intent.putExtra(“key_from_main”, “data_from_main”)

startActivityForResult(intent , 100) //换成了这个车子,这个车子能携礼物回来,但可不省油,要费点脑子。我们先了解下,startActivityForResult(intent, requestCode) 这个是能返回礼物的车子,里面有个requestCode参数,干啥用呢?这里就是当anotheractivity结束的时候,会返回消息结果,其实就是一个数字,一般情况下,我们只需要保证requestCode>-1即可,这样回来的时候期初的activity能收到result。

怎么样才能给小哥intent回礼物呢?显然这是another兄弟的事。another兄弟并不笨,它自己有主见:它自己有自己的目的,找个intent1的小哥去做这件事如下:

val intent1 = Intent()

intent1.putExtra(“key_back”, “value_data”) // intent1小哥打包要返回的数据

setResult(RESULT_OK, intent1) // another兄弟指示返回去的结果状态,这里是RESULT_OK.期初来源activity会用到这个状态。

当another兄弟要送客关门了,就会把这个数据给送出,之前小哥光荣的完成了自己的事情,就谢幕了。接下来返回的礼物当然要接收了,谁接收呢,当然是起初来源的this接收,通过下面的方法收取返回的礼物。

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { //注意这个方法是重写的super的方法,有3个参数匹配super的onactivityresult方法。requestCode: Int这个请求码,对应这里 startActivityForResult(intent , 100)100。当another兄弟退出舞台的时候,this源activity会收到setResult(RESULT_OK, intent1) 中的result_ok状态标志,也就是说resultcode是验证状态的。参数 intent持有返回来的打包数据小哥。

    super.onActivityResult(requestCode, resultCode, data)

    when(requestCode){ //存在有效请求码

        100 -> if (resultCode == RESULT_OK){  //正确的收到了礼物

            val returnData = data?.getStringExtra("key_data_return") //毫不客气的拿出礼物。

        }

    }

}

上面的过程,完成了从一个activity跳转到另一个activity的同时,并传递返回数据的过程讲解。主要是通过文章理解这个过程,至于更复杂的数据结果传递,都大同小异。希望本文对一些朋友有所帮助,即是我的最大快乐!

技术探讨:QQ 2047879076

相关标签: android