Android startActivityForResult棄用?

startActivityForResult期望有返回值,會使用的方法

如今也被棄用了

現在Google推薦使用ActivityResultContract方法

使用方法參考下方

  • 1. 繼承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
        }
    }
    

  • 2. 註冊回調
  • //必須在STARTED之前註冊,否則會拋出異常
    private val mActivityLauncher = registerForActivityResult(
        MyActivityResultContract()) { result ->
        println("回傳資料:$result")
    }
    

  • 3. 切換Activity並傳入字串
  • MyActivityResultContract剛剛設定createIntent

    設定目標為SecondActivity

    因此launch會啟動目標SecondActivity

    binding.button.setOnClickListener {
        mActivityLauncher.launch("Test content")
    }
    

  • 4. 接收傳入值與設定返回結果
  • 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返回後,
    打印 回傳資料:返回結果~


    相關文章

    Android生命週期Android 新增Lifecycle觀察
    Android startActivity其他用法Android Launch modes使用分析整理

    訂閱Codeilin的旅程,若有最新消息會通知。

    廣告

    發表迴響

    在下方填入你的資料或按右方圖示以社群網站登入:

    WordPress.com 標誌

    您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

    Twitter picture

    您的留言將使用 Twitter 帳號。 登出 /  變更 )

    Facebook照片

    您的留言將使用 Facebook 帳號。 登出 /  變更 )

    連結到 %s

    WordPress.com.

    向上 ↑

    %d 位部落客按了讚: