startActivityForResult期望有返回值,會使用的方法
如今也被棄用了
現在Google推薦使用ActivityResultContract方法
使用方法參考下方
此Activity設定啟動目標SecondActivity::class.java
//ActivityResultContract //第一個是Input型態 //第二個是Return型態 class MyActivityResultContract: ActivityResultContract<String?, String?>(){ override fun createIntent(context: Context, input: String?): Intent { return Intent(context,SecondActivity::class.java).apply { putExtra("send",input) } } override fun parseResult(resultCode: Int, intent: Intent?): String? { val data = intent?.getStringExtra("result") ?: return null return if (resultCode == Activity.RESULT_OK) data else null } }
//必須在STARTED之前註冊,否則會拋出異常 private val mActivityLauncher = registerForActivityResult( MyActivityResultContract()) { result -> println("回傳資料:$result") }
MyActivityResultContract剛剛設定createIntent
設定目標為SecondActivity
因此launch會啟動目標SecondActivity
binding.button.setOnClickListener { mActivityLauncher.launch("Test content") }
MyActivityResultContract設定createIntent裡面
引入的參數,key -> “send",所以剛剛launch引入的參數,可以由key取出
這裡設定setResult後
會由MyActivityResultContract內的parseResult處理
處理後,會觸發2.註冊回調,並傳入結果
val string = intent.getStringExtra("send") println("SecondActivity get:$string") binding.button.setOnClickListener { val intent = Intent().apply { putExtra("result","返回結果~") } setResult(Activity.RESULT_OK,intent) finish() }
進入SecondActivity時,因為收到傳入值
打印 SecondActivity get:Test content
按下button返回後,
打印 回傳資料:返回結果~
相關文章
訂閱Codeilin的旅程,若有最新消息會通知。
廣告