使用新的Activity Result API替代onActivityResult方法

使用 GPT-4o 回答,作者 GPT4oMini.app

问题:

在Android Studio中用Kotlin进行开发。 Activity部分代码如下 override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) when (requestCode) { 1 -> if (resultCode == RESULT_OK) { val returnedData = data?.getStringExtra("data_return") Log.d("FirstActivity", "returned data is $returnedData") } } }

有没有不建议使用的、或过时的函数?请纠正和完善代码。

答案:

在Android开发中,onActivityResult方法已经被标记为过时(deprecated),建议使用新的Activity Result API来处理结果。新的API更简洁且更易于管理。

以下是如何使用新的Activity Result API来替代onActivityResult方法的示例:

  1. 首先,在你的Activity中定义一个ActivityResultLauncher来启动Activity并处理结果。

  2. 然后,在onCreate方法中初始化这个ActivityResultLauncher

  3. 最后,使用ActivityResultLauncher来启动Activity。

以下是完整的代码示例:

import android.content.Intent
import android.os.Bundle
import android.util.Log
import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AppCompatActivity

class FirstActivity : AppCompatActivity() {

    private lateinit var startForResult: ActivityResultLauncher<Intent>

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_first)

        // Initialize the ActivityResultLauncher
        startForResult = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
            if (result.resultCode == RESULT_OK) {
                val returnedData = result.data?.getStringExtra("data_return")
                Log.d("FirstActivity", "returned data is $returnedData")
            }
        }

        // Example of how to start another activity
        val intent = Intent(this, SecondActivity::class.java)
        startForResult.launch(intent)
    }
}

在这个示例中,我们使用registerForActivityResult方法来注册一个ActivityResultLauncher,并使用ActivityResultContracts.StartActivityForResult()来处理结果。这样可以避免使用过时的onActivityResult方法。

请注意,你需要根据你的实际需求来启动Activity,这里只是一个示例。