Android:startActivityForResult替换方案

1、startActivityForResult 替代方案:

startActivityForResult() 方法用于返回数据给上一个 Activity。
但这个方法已经被废弃了很久,现在 Google 使用 registerForActivityResult() 方法来实现此功能。

2、registerForActivityResult() 实现

使用 registerForActivityResult() 写法,实现 SecondActivity 返回数据给 FirstActivity。

1、FirstActivity

class FirstActivity : AppCompatActivity() {
    //请求返回的封装
    private val requestDataLauncher =
        registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
            //返回接受的数据
            if (result.resultCode == RESULT_OK) {
                val data = result.data?.getStringExtra("data")
                Log.d("LUO", "data =${data}")
            }
        }
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_first)
        var  btnNext = findViewById<Button>(R.id.btn_next)

        //传递的数据
        btnNext.setOnClickListener {
            val intent = Intent(this, SecondActivity::class.java)
            intent.putExtra("name","FirstActivity:小明")
            requestDataLauncher.launch(intent) //调用 launch 方法,该方法接收 输入类型 I
        }
    }
}

2、SecondActivity

class SecondActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_second)
        var  btnNext = findViewById<Button>(R.id.btn_next)
        //intent 必须为getIntent(),自己new Intent()获取值为null
        var name = intent.getStringExtra("name")
        Log.d("LUO", "name =${name}")

        //返回的数据
        btnNext.setOnClickListener {
           val intent = Intent()
            intent.putExtra("data","SecondActivity 返回数据")
            setResult(RESULT_OK,intent)
            finish()
        }
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。