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

Android Activity Results API代替onActivityResult處理頁(yè)面數(shù)據(jù)

 更新時(shí)間:2022年09月06日 15:32:47   作者:兒歌八萬(wàn)首  
說(shuō)到onActivityResult,我們已經(jīng)非常熟悉來(lái),通過(guò)在A activity啟動(dòng)B activity并且傳入數(shù)據(jù)到B中,然后在A中通過(guò)onActivityResult來(lái)接收B中返回的數(shù)據(jù)。在最新的activity-ktx的beta版本中,谷歌已經(jīng)廢棄了onActivityResult

onActivityResult

 @SuppressWarnings("deprecation")
    @Override
    @CallSuper
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        mFragments.noteStateNotSaved();
        super.onActivityResult(requestCode, resultCode, data);
    }

Activity Results API的使用

在最新beta版本中谷歌推薦使用Activity Results API來(lái)處理頁(yè)面數(shù)據(jù)的處理。通過(guò)新的 Activity Result API,我們可以單獨(dú)的類中處理結(jié)果回調(diào),真正做到 單一職責(zé) 。

1.在app下的build.gradle中加入依賴:

implementation 'androidx.activity:activity-ktx:1.2.0-beta01'
implementation 'androidx.fragment:fragment-ktx:1.3.0-beta01'

2.自定義ActivityResultContract

自定義ActivityResultContract,用來(lái)處理兩個(gè)activity互傳數(shù)據(jù)的處理,替代onActivityResult方法 其中ActivityResultContract<String, String>第一個(gè)泛型參數(shù)表示輸入的參數(shù)類型,即要帶到下一個(gè)Activity的數(shù)據(jù)類型, 第二個(gè)泛型參數(shù)表示輸出參數(shù)類型,即第二個(gè)Activity回傳第一個(gè)Activity的數(shù)據(jù)類型。

class CustomActivityResultContract : ActivityResultContract<String, String>() {
    override fun createIntent(context: Context, input: String?): Intent {
        //要傳到下一個(gè)activity中的數(shù)據(jù),從A activity中帶到B activity中的數(shù)據(jù)。
        return Intent(context, SecondActivity::class.java).putExtra("name", input)
    }
    override fun parseResult(resultCode: Int, intent: Intent?): String {
        //從activity回傳的數(shù)據(jù)
        val result = intent?.getStringExtra("result") //從B activity中回傳的數(shù)據(jù)。
        if (resultCode == Activity.RESULT_OK && result != null) {
            return "$result"
        }
        return ""
    }
}

3.注冊(cè)ActivityResult協(xié)議

在A activity中注冊(cè)ActivityResult協(xié)議,使用我們剛剛定義的CustomActivityResultContract。

registerForActivityResult方法有兩個(gè)參數(shù),第一個(gè)參數(shù)是傳入對(duì)應(yīng)的Contract,第二個(gè)參數(shù)是回調(diào)結(jié)果callback。

private val activityLauncher = registerForActivityResult(CustomActivityResultContract()) {
        //第二個(gè)頁(yè)面關(guān)閉后回到第一個(gè)頁(yè)面的回調(diào)方法
        tvName.text = it
    }

4.調(diào)用launch方法開(kāi)啟界面跳轉(zhuǎn)

使用第三步我們生成的啟動(dòng)器對(duì)象的launch方法來(lái)啟動(dòng)界面跳轉(zhuǎn),launch方法需要傳入一個(gè)輸入?yún)?shù),也就是需要帶到下一個(gè)頁(yè)面的參數(shù),可以是任意對(duì)象:

 btnStartSecond.setOnClickListener {
            //點(diǎn)擊跳轉(zhuǎn)到SecondActivity
            activityLauncher.launch("我是第一個(gè)頁(yè)面?zhèn)鬟^(guò)去的參數(shù)")
        }

5.使用谷歌內(nèi)置的 ActivityResultContract來(lái)進(jìn)行頁(yè)面跳轉(zhuǎn)

還可以通過(guò)ActivityResultContracts類來(lái)調(diào)用谷歌為我們內(nèi)置的Contract,其中包含來(lái)各種常用的Contract

  • @StartActivityForResult: 通用的Contract,不做任何轉(zhuǎn)換,Intent作為輸入,ActivityResult作為輸出,這也是最常用的一個(gè)協(xié)定。
  • @RequestMultiplePermissions: 用于請(qǐng)求一組權(quán)限
  • @RequestPermission: 用于請(qǐng)求單個(gè)權(quán)限
  • @TakePicturePreview: 調(diào)用MediaStore.ACTION_IMAGE_CAPTURE拍照,返回值為Bitmap圖片
  • @TakePicture: 調(diào)用MediaStore.ACTION_IMAGE_CAPTURE拍照,并將圖片保存到給定的Uri地址,返回true表示保存成功。
  • @TakeVideo: 調(diào)用MediaStore.ACTION_VIDEO_CAPTURE 拍攝視頻,保存到給定的Uri地址,返回一張縮略圖。
  • @PickContact: 從通訊錄APP獲取聯(lián)系人
  • @GetContent: 提示用選擇一條內(nèi)容,返回一個(gè)通過(guò)ContentResolver#openInputStream(Uri)訪問(wèn)原生數(shù)據(jù)的Uri地址(content://形式) 。默認(rèn)情況下,它增加了Intent#CATEGORY_OPENABLE, 返回可以表示流的內(nèi)容。
  • @CreateDocument: 提示用戶選擇一個(gè)文檔,返回一個(gè)(file:/http:/content:)開(kāi)頭的Uri。
  • @OpenMultipleDocuments: 提示用戶選擇文檔(可以選擇多個(gè)),分別返回它們的Uri,以List的形式。
  • @OpenDocumentTree: 提示用戶選擇一個(gè)目錄,并返回用戶選擇的作為一個(gè)Uri返回,應(yīng)用程序可以完全管理返回目錄中的文檔。

一般情況下使用StartActivityForResult就可以滿足大部分需求啦。

 private val activityResultLauncher =
        registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
            if (it.resultCode == RESULT_OK) {
                val result = intent?.getStringExtra("result")
                tvName.text = result
            }
        }
   btnStartSecond.setOnClickListener {
            //點(diǎn)擊跳轉(zhuǎn)到SecondActivity
            val intent = Intent(this, SecondActivity::class.java)
            intent.putExtra("name", "我是第一個(gè)頁(yè)面?zhèn)鬟^(guò)去的參數(shù)")
            activityResultLauncher.launch(intent)
        }

使用系統(tǒng)內(nèi)置的ActivityResultContract可以很方便的實(shí)現(xiàn)頁(yè)面間傳值來(lái),這樣也可以實(shí)現(xiàn)解偶操作了。

到此這篇關(guān)于Android Activity Results API代替onActivityResult處理頁(yè)面數(shù)據(jù)的文章就介紹到這了,更多相關(guān)Android Activity Results API內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • kotlin代碼中!!操作符的清楚方法

    kotlin代碼中??!操作符的清楚方法

    這篇文章主要給大家介紹了關(guān)于kotlin代碼中!!操作符的清楚方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-06-06
  • Android布局——Preference自定義layout的方法

    Android布局——Preference自定義layout的方法

    PreferenceActivity是一個(gè)方便設(shè)置管理的界面,但是對(duì)于界面顯示來(lái)說(shuō)比較單調(diào),所以自定義布局就很有必要了,下面與大家分享下Preference中自定義layout的方法
    2013-06-06
  • Android如何實(shí)現(xiàn)藍(lán)牙配對(duì)連接功能

    Android如何實(shí)現(xiàn)藍(lán)牙配對(duì)連接功能

    Android 并沒(méi)有開(kāi)放配對(duì)連接耳機(jī)的接口,而且網(wǎng)上大部分資料都是講解如何連接藍(lán)牙4.0的,很少有資料詳細(xì)介紹藍(lán)牙2.0相關(guān)的。期間還是踩了不少坑才摸索出解決辦法。所以把我自己摸索總結(jié)出來(lái)的經(jīng)驗(yàn)梳理記錄下,以便備份
    2021-05-05
  • Android JSON數(shù)據(jù)與實(shí)體類之間的相互轉(zhuǎn)化(GSON的用法)

    Android JSON數(shù)據(jù)與實(shí)體類之間的相互轉(zhuǎn)化(GSON的用法)

    這篇文章主要介紹了Android JSON數(shù)據(jù)與實(shí)體類之間的相互轉(zhuǎn)化(GSON的用法),非常具有實(shí)用價(jià)值,需要的朋友可以參考下。
    2017-01-01
  • Android開(kāi)發(fā)實(shí)現(xiàn)生成excel的方法詳解

    Android開(kāi)發(fā)實(shí)現(xiàn)生成excel的方法詳解

    這篇文章主要介紹了Android開(kāi)發(fā)實(shí)現(xiàn)生成excel的方法,結(jié)合實(shí)例形式詳細(xì)分析了Android生成Excel的具體步驟與存儲(chǔ)、導(dǎo)入、添加等相關(guān)操作技巧,需要的朋友可以參考下
    2017-10-10
  • Flutter開(kāi)發(fā)之動(dòng)態(tài)權(quán)限的使用

    Flutter開(kāi)發(fā)之動(dòng)態(tài)權(quán)限的使用

    眾所周知,Android在6.0版本后將權(quán)限修改成了動(dòng)態(tài)權(quán)限,而iOS則一直使用的是動(dòng)態(tài)權(quán)限,所以在Flutter應(yīng)用開(kāi)發(fā)中如果涉及到一些危險(xiǎn)權(quán)限,就需要進(jìn)行動(dòng)態(tài)申請(qǐng),本文就詳細(xì)的介紹一下,感興趣的可以了解一下
    2021-09-09
  • Android指紋登錄工具類封裝

    Android指紋登錄工具類封裝

    這篇文章主要為大家詳細(xì)介紹了Android指紋登錄工具類的封裝,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • android隱式意圖激活瀏覽器的實(shí)現(xiàn)方法

    android隱式意圖激活瀏覽器的實(shí)現(xiàn)方法

    下面小編就為大家?guī)?lái)一篇android隱式意圖激活瀏覽器的實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06
  • Android編程實(shí)現(xiàn)文件瀏覽功能的方法【類似于FileDialog的功能】

    Android編程實(shí)現(xiàn)文件瀏覽功能的方法【類似于FileDialog的功能】

    這篇文章主要介紹了Android編程實(shí)現(xiàn)文件瀏覽功能的方法,可實(shí)現(xiàn)類似于FileDialog的功能,涉及Android針對(duì)文件與目錄操作的相關(guān)技巧,需要的朋友可以參考下
    2016-11-11
  • Android常用的AlertDialog對(duì)話框及自定義對(duì)話框

    Android常用的AlertDialog對(duì)話框及自定義對(duì)話框

    本文主要介紹了android常用的AlertDialog對(duì)話框及自定義對(duì)話框的相關(guān)知識(shí)。具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧
    2017-04-04

最新評(píng)論

穆棱市| 白玉县| 永吉县| 祁连县| 赞皇县| 千阳县| 赤水市| 沈丘县| 敦化市| 诸暨市| 突泉县| 怀化市| 阿拉善左旗| 台东县| 色达县| 仲巴县| 桦南县| 临海市| 琼结县| 富蕴县| 佛学| 三都| 巴里| 自贡市| 兴宁市| 延边| 盈江县| 长寿区| 连城县| 鄂尔多斯市| 崇阳县| 铅山县| 鞍山市| 衡阳县| 丹东市| 拉萨市| 岢岚县| 金门县| 宽城| 北川| 神农架林区|