最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android入門之在Activity之間穿梭的Intent

 更新時(shí)間:2021年10月09日 10:04:40   作者:低吟不作語  
Intent可以用來啟動(dòng)Activity(startActivity(Intent))、Serveice(startService(Intent))等組件,可以用來綁定Activity和Service以建立它們之間的通信(bindServiceConnaction(Intent,ServiceConnection,int)),可以作為Broadcast Intent發(fā)送給廣播接收器

概述

Intent 是 Android 程序中各組件之間進(jìn)行交互的一種重要方式,它不僅可以指明當(dāng)前組件想要執(zhí)行的動(dòng)作,還可以在不同組件之間傳遞數(shù)據(jù)

Intent 大致可分為兩種:顯式 Intent 和隱式 Intent

1. 顯式 Intent

Intent 有多個(gè)構(gòu)造函數(shù)的重載,其中一個(gè)是 Intent(Context packetContext, Class<?> cls),這個(gè)構(gòu)造函數(shù)接收兩個(gè)參數(shù):

  • 第一個(gè)參數(shù) Context 要求提供一個(gè)啟動(dòng) Activity 的上下文
  • 第二個(gè)參數(shù) Class 用于指定想要啟動(dòng)的目標(biāo) Activity

通過這個(gè)構(gòu)造函數(shù)可以構(gòu)建出 Intent,Activity 類中提供了一個(gè) startActivity() 方法,專門啟動(dòng) Activity,它接收一個(gè) Intent 參數(shù)。我們定義一個(gè)按鈕 button1,修改點(diǎn)擊事件

button1.setOnClickListener {
    val intent = Intent(this, SecondActivity::class.java)
    startActivityForResult(intent)
}

使用這種方式啟動(dòng) Activity,Intent 的意圖十分明顯,因此稱之為顯式 Intent

2. 隱式 Intent

隱式 Intent 并不明確指出想要啟動(dòng)哪一個(gè) Activity,而是指定了一系列更為抽象的 action 和 category 等信息,然后交由系統(tǒng)去分析這個(gè) Intent,并幫助我們找出適合的 Activity 去啟動(dòng)

通過在 <activity> 標(biāo)簽配置 <intent-filter> 的內(nèi)容,可以指定當(dāng)前 Activity 能夠響應(yīng)的 action 和 category,打開 AndroidManifest.xml,添加如下代碼:

<activity android:name=".SecondActivity">
	<intent-filter>
		<action android:name="com.example.activitytest.ACTION_START" />
		<category android:name="android.intent.category.DEFAULT" />
        <category android:name="com.example.activityest.MY_CATEGORY" />
	</intent-filter>
</activity>

我們指明了當(dāng)前 Activity 可以響應(yīng) com.example.activitytest.ACTION_START 這個(gè) action,而 <category> 標(biāo)簽則包含了一些附加信息。只有 <action> 和 <category> 中的內(nèi)容同時(shí)匹配 Intent 中指定的 action 和 category 時(shí),這個(gè) Activity 才能響應(yīng)該 Intent

button1.setOnClickListener {
    val intent = Intent("com.example.activitytest.ACTION_START")
    intent.addCategory("com.example.activityest.MY_CATEGORY")
    startActivity(intent)
}

使用隱式 Intent 不僅可以啟動(dòng)自己程序內(nèi)的 Activity,還可以啟動(dòng)其他程序的 Activity,這使得多個(gè)應(yīng)用程序之間的功能共享成為可能。比如你的應(yīng)用程序需要展示一個(gè)網(wǎng)頁,只需要調(diào)用系統(tǒng)的瀏覽器來打開這個(gè)網(wǎng)頁即可

button1.setOnClickListener {
	val intent = Intent(Intent.ACTION_VIEW)
	intent.data = Uri.parse("https://www.baidu.com")
	startActivity(intent)
}

使用 Intent 傳遞數(shù)據(jù)

1. 向下一個(gè) Activity 傳遞數(shù)據(jù)

在啟動(dòng) Activity 時(shí)傳遞數(shù)據(jù)的思路很簡(jiǎn)單,Intent 提供了一系列 putExtra() 方法的重載,可以把數(shù)據(jù)暫存在 Intent 中,在啟動(dòng)另一個(gè) Activity 時(shí),再把數(shù)據(jù)從 Intent 中取出即可

button1.setOnClickListener {
    val data = "Hello SecondActivity"
    val intent = Intent(this, SecondActivity::class.java)
    intent.putExtra("extra_data", data)
    startActivity(intent)
}

然后在 SecondActivity 中將傳遞的數(shù)據(jù)取出

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.sceond_layout)
    val extraData = intent.getStringExtra("extra_data")
    Log.d("SecondActivity", "extra data is $extraData")
}

2. 返回?cái)?shù)據(jù)給上一個(gè) Activity

Activity 類中有一個(gè)啟動(dòng) Activity 的 startActivityForResult() 方法,可以在 Activity 銷毀時(shí)返回結(jié)果給上一個(gè) Activity,該方法接收兩個(gè)參數(shù):

  • 第一個(gè)參數(shù)還是 Intent
  • 第二個(gè)參數(shù)是請(qǐng)求碼,用于在之后的回調(diào)中判斷數(shù)據(jù)的來源

修改 FirstActivity 中按鈕的點(diǎn)擊事件代碼如下,這里使用了 startActivityForResult() 方法來啟動(dòng) SecondActivity,請(qǐng)求碼只要是個(gè)唯一值,這里傳入 1

button1.setOnClickListener {
    val intent = Intent(this, SecondActivity::class.java)
    startActivityForResult(intent, 1)
}

接下來在 SecondActivity 中給按鈕注冊(cè)點(diǎn)擊事件,并在點(diǎn)擊事件中添加返回?cái)?shù)據(jù)的邏輯

class SecondActivity : BaseActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.sceond_layout)
        button2.setOnClickListener {
            val intent = Intent()
            intent.putExtra("data_return", "Hello FirstActivity")
            setResult(RESULT_OK, intent)
            finish()
        }
    }
}

這里還是構(gòu)建了一個(gè) Intent,只不過這個(gè) Intent 僅僅用來傳遞數(shù)據(jù),然后調(diào)用了 setResult() 方法,該方法專門向上一個(gè) Activity 返回?cái)?shù)據(jù)

setResult() 方法接收兩個(gè)參數(shù):

  • 第一個(gè)參數(shù)用于向上一個(gè) Activity 返回處理結(jié)果,一般只使用 RESULT_OK 或 RESULT_CANCELED 這兩個(gè)值
  • 第二個(gè)參數(shù)則把帶有數(shù)據(jù)的 Intent 傳遞回去

由于我們使用 startActivityForResult() 方法來啟動(dòng) SecondActivity,SecondActivity 銷毀后會(huì)回調(diào)上一個(gè) Activity 的 onActivityResult() 方法,因此需要在 FirstActivity 中重寫該方法來得到返回?cái)?shù)據(jù)

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    when (requestCode) {
        1 -> if (resultCode == RESULT_OK) {
            val returnedData = data?.getStringExtra("data_return")
            Log.d("FirstActivity", "returned data is $returnedData")
        }
    }
}

onActivityResult() 方法帶有三個(gè)參數(shù):

  • 第一個(gè)參數(shù) requestCode,即我們啟動(dòng) Activity 時(shí)傳入的請(qǐng)求碼
  • 第二個(gè)參數(shù) resultCode,即我們?cè)诜祷財(cái)?shù)據(jù)時(shí)傳入的處理結(jié)果
  • 第三個(gè)參數(shù) data,即攜帶返回?cái)?shù)據(jù)的 Intent

由于在一個(gè) Activity 中有可能調(diào)用 startActivityForResult() 來啟動(dòng)很多不同的 Activity,而每一個(gè) Activity 返回的數(shù)據(jù)都會(huì)回調(diào)到 onActivityResult() 方法,因此我們首先要做的是通過檢查 requestCode 的值判斷數(shù)據(jù)來源,再通過 resultCode 的值來判斷處理結(jié)果是否成功,最后從 data 中取值并打印

到此這篇關(guān)于Android入門之在Activity之間穿梭的Intent 的文章就介紹到這了,更多相關(guān)Android Intent內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Android WaveView實(shí)現(xiàn)水流波動(dòng)效果

    Android WaveView實(shí)現(xiàn)水流波動(dòng)效果

    這篇文章主要介紹了 Android自定義控件 WaveView實(shí)現(xiàn)水流波動(dòng)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-03-03
  • Android項(xiàng)目中引用本地aar文件的方法

    Android項(xiàng)目中引用本地aar文件的方法

    這篇文章主要介紹了Android項(xiàng)目中引用本地aar文件的方法,本文講解了什么是aar文件、導(dǎo)出aar文件方法、引用本地的aar文件方法等內(nèi)容,需要的朋友可以參考下
    2015-05-05
  • Android實(shí)現(xiàn)多點(diǎn)觸控,自由縮放圖片的實(shí)例代碼

    Android實(shí)現(xiàn)多點(diǎn)觸控,自由縮放圖片的實(shí)例代碼

    本篇文章主要介紹了Android實(shí)現(xiàn)多點(diǎn)觸控,自由縮放圖片的實(shí)例代碼,可以自由地對(duì)圖片進(jìn)行縮放和移動(dòng),非常具有實(shí)用價(jià)值,需要的朋友可以參考下。
    2016-12-12
  • Android自定義View仿支付寶芝麻信用分儀表盤

    Android自定義View仿支付寶芝麻信用分儀表盤

    前幾天支付寶剛剛升級(jí)到v9.9,看了一眼里面的芝麻信用分,儀表盤挺好看的,所以想著來寫一個(gè)這個(gè)版本的儀表盤,不說完全一模一樣,只是為了猜測(cè)支付寶在做這個(gè)的時(shí)候是如何設(shè)計(jì)的,在此記錄一下,有需要的可以參考借鑒。
    2016-09-09
  • Android自定義ActionProvider ToolBar實(shí)現(xiàn)Menu小紅點(diǎn)

    Android自定義ActionProvider ToolBar實(shí)現(xiàn)Menu小紅點(diǎn)

    這篇文章主要介紹了Android自定義ActionProvider ToolBar實(shí)現(xiàn)Menu小紅點(diǎn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • Kotlin如何直接使用控件ID原理詳析

    Kotlin如何直接使用控件ID原理詳析

    這篇文章主要給大家介紹了關(guān)于Kotlin如何直接使用控件ID原理的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12
  • Android UI組件AppWidget控件入門詳解

    Android UI組件AppWidget控件入門詳解

    這篇文章主要介紹了Android UI組件AppWidget控件入門,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • Android Studio 3.5版本JNI生成SO文件詳解

    Android Studio 3.5版本JNI生成SO文件詳解

    這篇文章主要介紹了Android Studio 3.5版本JNI生成SO文件詳解,想了解JNI的同學(xué),可以參考下
    2021-04-04
  • Android 判斷是否有外網(wǎng)連接

    Android 判斷是否有外網(wǎng)連接

    本文給大家分享的是使用Android實(shí)現(xiàn)判斷是否有外網(wǎng)鏈接,有需要的小伙伴可以參考下。
    2016-02-02
  • Android選擇與上傳圖片之Matisse教程

    Android選擇與上傳圖片之Matisse教程

    這篇文章主要介紹了在Android中對(duì)于圖片的選擇與上傳方法,本文介紹了Matisse的相關(guān)使用教程,學(xué)習(xí)Android的同學(xué)進(jìn)來看看吧
    2021-08-08

最新評(píng)論

阿拉善右旗| 稻城县| 察雅县| 衡南县| 司法| 北票市| 云安县| 白河县| 孟村| 德昌县| 克什克腾旗| 滦南县| 嘉定区| 虎林市| 怀化市| 南城县| 甘孜| 四川省| 河北区| 南丰县| 泸定县| 台东市| 龙井市| 永福县| 正宁县| 常州市| 抚松县| 邯郸市| 措勤县| 平顺县| 仁寿县| 荃湾区| 聂拉木县| 宜宾县| 石楼县| 卢龙县| 古蔺县| 枞阳县| 贵州省| 台湾省| 饶河县|