Android Studio bug:registerForActivityResult 简易使用以及报错[已解决]

文章讲述了在Android开发中,`startActivityForResult`方法已被弃用,推荐使用`registerForActivityResult`。作者介绍了如何在FirstActivity和SecondActivity中替换旧方法,并强调了`registerForActivityResult`应在Activity的onCreate方法或之前注册以避免生命周期错误。
摘要由CSDN通过智能技术生成

在第一行代码第三版里面,使用startActivityForResult来在Activity销毁的时候能够返回一个结果给上 一个Activity,但是现在这个方法已经被废弃了,推荐使用registerForActivityResult

简易写法如下

FirstActivity里面的,SecondActivity里面和使用startActivityForResult一样

然后我这里还是用的findViewById,因为第一行代码那个kotlin库又被废弃了,但是又有个viewbinding出来了好像,可以去看郭霖老师的csdn博客,里面详细介绍了,我还是老老实实用findViewById吧

// FirstActivity
val launcher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()){
            Log.d(it.resultCode.toString(), "111")
            Log.d(it.data.toString(), "222")
            if(it.resultCode==RESULT_OK){
                val resultData= it.data?.getStringExtra("data")
                Toast.makeText(this,"data $resultData",Toast.LENGTH_LONG).show()
            }
        }
        val button1:Button=findViewById(R.id.button1)
        button1.setOnClickListener {
            launcher.launch(Intent(this,SecondActivity::class.java))
        }
// SecondActivity
val button2: Button = findViewById(R.id.button2)
        button2.setOnClickListener {
            val intent=Intent()
            intent.putExtra("data","成功返回了")
            setResult(RESULT_OK,intent)
            finish()
        }

注意这个registerForActivityResult写的位置,有可能会出现bug
registerForActivityResult 报错:
FirstActivity@3fe998a is attempting to register while current state is RESUMED. LifecycleOwners must call register before they are STARTED.

在这里插入图片描述

这个意思就是当前你这个生命周期已经是在运行了,你必须要在它开始之前注册这个register,我写的这个位置就不对,写在button的监听器里面,也就是写在了启动之后,所以必须得写在创建之前,也就是onCreate下面(反正创建之前就行了,我不是很熟悉生命周期),而不是写在回调函数里面(肯定都已经创建好了)

over!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值