成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Android進(jìn)階:全面擁抱Activity Results API來替代onActivityResult

開發(fā) 前端
Activity Results API 是 Google官方推薦的Activity、Fragment獲取返回結(jié)果的方式。ActivityResultContract是一個(gè)抽象類,也是我們需要定義的協(xié)議,它需要去定義如何傳遞數(shù)據(jù)和如何處理返回的數(shù)據(jù)。

[[428908]]

本文轉(zhuǎn)載自微信公眾號(hào)「Android開發(fā)編程」,作者Android開發(fā)編程。轉(zhuǎn)載本文請(qǐng)聯(lián)系A(chǔ)ndroid開發(fā)編程代碼眾號(hào)。

前言

隨著應(yīng)用的擴(kuò)展,onActivityResult回調(diào)方法各種嵌套、耦合嚴(yán)重、難以維護(hù);

在google最新的activity-ktx beta版本中已經(jīng)廢棄了原onActivityResult方法,推薦使用Activity Results API來處理頁面數(shù)據(jù)的處理;

通過新的 Activity Result API,我們可以單獨(dú)的類中處理結(jié)果回調(diào),真正做到單一職責(zé)。

今天我們就來介紹下:

一、activity results api介紹和使用方法

1、什么是results api

Activity Results API 是 Google官方推薦的Activity、Fragment獲取返回結(jié)果的方式。ActivityResultContract是一個(gè)抽象類,也是我們需要定義的協(xié)議,它需要去定義如何傳遞數(shù)據(jù)和如何處理返回的數(shù)據(jù);

相當(dāng)于原startActivityForResult 和onActivityResult方法;

2、使用步驟

主要用到兩個(gè)組件

  • ActivityResultContract: 協(xié)議,它定義了如何傳遞數(shù)據(jù)和如何處理返回的數(shù)據(jù);
  • ActivityResultLauncher: 啟動(dòng)器,調(diào)用ActivityResultLauncher的launch方法來啟動(dòng)頁面跳轉(zhuǎn),作用相當(dāng)于原來的startActivity()。

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

  1. mplementation 'androidx.activity:activity-ktx:1.2.0-beta01' 
  2.  
  3. implementation 'androidx.fragment:fragment-ktx:1.3.0-beta01' 

2.2首先自定義一個(gè)ActivityResultContract,實(shí)現(xiàn)兩個(gè)activity互傳的數(shù)據(jù)處理

  1. class MyActivityResultContract : ActivityResultContract<String, String?>() { 
  2.     override fun createIntent(context: Context, input: String?): Intent { 
  3.         return Intent(context, SecondActivity::class.java).apply { 
  4.             putExtra("input", input) 
  5.         } 
  6.     } 
  7.     override fun parseResult(resultCode: Int, intent: Intent?): String? { 
  8.         val data = intent?.getStringExtra("result"
  9.         return if (resultCode == Activity.RESULT_OK && !TextUtils.isEmpty(data)) data else null 
  10.     } 
  11. 調(diào)用registerForActivityResult方法,注冊(cè)剛剛定義的contract協(xié)議,返回一個(gè)activityResultLauncher對(duì)象。 
  12.   val activityResultLauncher = registerForActivityResult(MyActivityResultContract()) { 
  13.             Toast.makeText(this, "result value is :${it}", Toast.LENGTH_LONG).show() 
  14.         } 

2.3 用返回的launcher對(duì)象啟動(dòng)另一個(gè)activity界面

  1. btn_start_second.setOnClickListener { 
  2.             activityResultLauncher.launch("second activity start"
  3.    } 

3、使用內(nèi)置的 ActivityResultContract來進(jìn)行頁面跳轉(zhuǎn)

還可以通過ActivityResultContracts類來調(diào)用谷歌為我們內(nèi)置的Contract,其中包含來各種常用的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è)通過ContentResolver#openInputStream(Uri)訪問原生數(shù)據(jù)的Uri地址(content://形式) 。默認(rèn)情況下,它增加了Intent#CATEGORY_OPENABLE, 返回可以表示流的內(nèi)容;
  • @CreateDocument: 提示用戶選擇一個(gè)文檔,返回一個(gè)(file:/http:/content:)開頭的Uri。
  • @OpenMultipleDocuments: 提示用戶選擇文檔(可以選擇多個(gè)),分別返回它們的Uri,以List的形式;
  • @OpenDocumentTree: 提示用戶選擇一個(gè)目錄,并返回用戶選擇的作為一個(gè)Uri返回,應(yīng)用程序可以完全管理返回目錄中的文檔;
  1. private val activityResultLauncher = 
  2.         registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { 
  3.             if (it.resultCode == RESULT_OK) { 
  4.                 val result = intent?.getStringExtra("result"
  5.                 tvName.text = result 
  6.             } 
  7.         } 
  8.    btnStartSecond.setOnClickListener { 
  9.             //點(diǎn)擊跳轉(zhuǎn)到SecondActivity 
  10.             val intent = Intent(this, SecondActivity::class.java) 
  11.             intent.putExtra("name""我是第一個(gè)頁面?zhèn)鬟^去的參數(shù)"
  12.             activityResultLauncher.launch(intent) 
  13.         } 

使用系統(tǒng)內(nèi)置的ActivityResultContract可以很方便的實(shí)現(xiàn)頁面間傳值來。

總結(jié)

使用activity results api替代傳統(tǒng)的onActivityResult方法,可以簡化我們的代碼,提高代碼的重用性;一起加油!

 

責(zé)任編輯:武曉燕 來源: Android開發(fā)編程
相關(guān)推薦

2021-10-13 07:30:13

AndroidAlarmManageWorkManager

2011-10-14 09:27:57

Hadoop數(shù)據(jù)庫SQL Server

2011-10-14 16:03:30

微軟Hadoop

2022-06-30 11:36:10

KubeSphereGitOpsLinux

2013-12-02 09:44:33

RadwareOpenStack

2016-03-24 14:02:05

ActivityAndroid啟動(dòng)

2021-10-03 15:08:32

Android

2021-08-23 06:27:46

AndroidctivitysetContentV

2015-05-20 15:51:50

敏捷網(wǎng)絡(luò)/華為

2014-11-20 13:07:18

OracleSaaS

2020-02-03 09:20:43

深度學(xué)習(xí)編程人工智能

2015-05-21 08:55:46

華為敏捷網(wǎng)絡(luò)

2019-02-19 14:52:01

微軟開源Windows

2024-09-18 00:00:01

ChatGPTOpenAI工具型

2021-08-11 17:15:17

AndroidActivity場景

2021-08-24 07:53:28

AndroidActivity生命周期

2022-06-28 12:02:11

ClouderaCDP混合數(shù)據(jù)

2016-10-27 15:14:05

華為OpenStack

2025-02-17 00:00:03

人工智能AI工具
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 91九色麻豆| 日韩中文字幕视频在线观看 | 午夜天堂精品久久久久 | 国产精品永久免费观看 | 国产日本精品视频 | 国产视频中文字幕在线观看 | 91精品国产综合久久香蕉922 | 麻豆视频国产在线观看 | 麻豆av网 | 99亚洲视频 | 美人の美乳で授乳プレイ | 欧美日韩久久久 | 日日艹夜夜艹 | 99精品国自产在线 | 在线一区 | 久久国产精品久久久久久 | 国内自拍视频在线观看 | 欧美一区二区另类 | 黑人久久 | 91色网站| 成人性生交大片免费看r链接 | 久久精品亚洲国产奇米99 | 性欧美xxxx | 国产日韩欧美在线观看 | 超级乱淫av片免费播放 | 免费亚洲婷婷 | 久久久www成人免费无遮挡大片 | 日日操av | 精品成人av | 国产精品性做久久久久久 | 午夜精品久久久久久久久久久久 | 天堂在线www | 欧美成人a | 欧美日韩综合视频 | 成人黄色在线观看 | 日本人做爰大片免费观看一老师 | 国产精品揄拍一区二区 | 亚洲视频在线观看 | 成人在线观看免费观看 | h在线免费观看 | 欧美中文在线 |