亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時間:2022年09月06日 15:32:47   作者:兒歌八萬首  
說到onActivityResult,我們已經(jīng)非常熟悉來,通過在A activity啟動B activity并且傳入數(shù)據(jù)到B中,然后在A中通過onActivityResult來接收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來處理頁面數(shù)據(jù)的處理。通過新的 Activity Result API,我們可以單獨的類中處理結(jié)果回調(diào),真正做到 單一職責 。

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,用來處理兩個activity互傳數(shù)據(jù)的處理,替代onActivityResult方法 其中ActivityResultContract<String, String>第一個泛型參數(shù)表示輸入的參數(shù)類型,即要帶到下一個Activity的數(shù)據(jù)類型, 第二個泛型參數(shù)表示輸出參數(shù)類型,即第二個Activity回傳第一個Activity的數(shù)據(jù)類型。

class CustomActivityResultContract : ActivityResultContract<String, String>() {
    override fun createIntent(context: Context, input: String?): Intent {
        //要傳到下一個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.注冊ActivityResult協(xié)議

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

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

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

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

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

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

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

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

  • @StartActivityForResult: 通用的Contract,不做任何轉(zhuǎn)換,Intent作為輸入,ActivityResult作為輸出,這也是最常用的一個協(xié)定。
  • @RequestMultiplePermissions: 用于請求一組權(quán)限
  • @RequestPermission: 用于請求單個權(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)容,返回一個通過ContentResolver#openInputStream(Uri)訪問原生數(shù)據(jù)的Uri地址(content://形式) 。默認情況下,它增加了Intent#CATEGORY_OPENABLE, 返回可以表示流的內(nèi)容。
  • @CreateDocument: 提示用戶選擇一個文檔,返回一個(file:/http:/content:)開頭的Uri。
  • @OpenMultipleDocuments: 提示用戶選擇文檔(可以選擇多個),分別返回它們的Uri,以List的形式。
  • @OpenDocumentTree: 提示用戶選擇一個目錄,并返回用戶選擇的作為一個Uri返回,應用程序可以完全管理返回目錄中的文檔。

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

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

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

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

相關(guān)文章

  • Android計步功能的實現(xiàn)代碼

    Android計步功能的實現(xiàn)代碼

    本篇文章主要介紹了Android計步功能的實現(xiàn)代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • Android inflater 用法及不同點

    Android inflater 用法及不同點

    在 實際開發(fā)中LayoutInflater這個類還是非常有用的,它的作用類似于findViewById()。這篇文章主要介紹了Android inflater 用法,需要的朋友可以參考下
    2018-11-11
  • 解析Android獲取系統(tǒng)cpu信息,內(nèi)存,版本,電量等信息的方法詳解

    解析Android獲取系統(tǒng)cpu信息,內(nèi)存,版本,電量等信息的方法詳解

    本篇文章對用Android獲取系統(tǒng)cpu信息,內(nèi)存,版本,電量等信息的方法進行了詳細的分析介紹。需要的朋友參考下
    2013-05-05
  • Android RecyclerView布局就這么簡單

    Android RecyclerView布局就這么簡單

    Android RecyclerView布局就這么簡單!RecyclerView比ListView更靈活,更強大,作為一個android開發(fā)者如果還不知道如何使用android5.X的RecyclerView未免有點說不過去了,本文就為大家講解Android RecyclerView布局,需要的朋友可以參考下
    2016-04-04
  • Android中Bitmap用法實例分析

    Android中Bitmap用法實例分析

    這篇文章主要介紹了Android中Bitmap用法,結(jié)合實例形式分析了Android操作圖片的載入、屬性設置、旋轉(zhuǎn)等相關(guān)技巧,需要的朋友可以參考下
    2016-02-02
  • 深入理解Android之接口回調(diào)機制

    深入理解Android之接口回調(diào)機制

    本篇文章主要介紹了Android之接口回調(diào)機制,在開發(fā)中經(jīng)常會用到,具有一定的學習價值,有需要的可以來了解一下。
    2016-10-10
  • Android設計模式之策略模式詳解

    Android設計模式之策略模式詳解

    這篇文章主要為大家詳細介紹了Android設計模式之策略模式的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • Android 解決監(jiān)聽home鍵的幾種方法

    Android 解決監(jiān)聽home鍵的幾種方法

    這篇文章主要介紹了Android 解決監(jiān)聽home鍵的幾種方法的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • Android EditText設置邊框的操作方法

    Android EditText設置邊框的操作方法

    這篇文章主要介紹了Android EditText設置邊框,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-12-12
  • Handler實現(xiàn)倒計時功能

    Handler實現(xiàn)倒計時功能

    這篇文章主要為大家詳細介紹了Handler實現(xiàn)倒計時功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-04-04

最新評論