You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

两个Activity代码逻辑一致,MainActivity向MainActivity2传值的Intent失效

问题:Activity间传值异常,从MainActivity到MainActivity2的问题无法传递

我是初学者,在两个Activity中添加了EditText,使用Intent实现页面间信息传递:从MainActivity向MainActivity2传递问题(显示在TextView),从MainActivity2向MainActivity传递答案(显示在TextView)。后者功能正常,但前者无法传递问题,这是怎么回事?

MainActivity 代码

class MainActivity : AppCompatActivity() {
    private lateinit var bq: ActivityMainBinding
    private lateinit var runner: ActivityResultLauncher<Intent>

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        bq = ActivityMainBinding.inflate(layoutInflater)
        setContentView(bq.root)

        runner = registerForActivityResult(ActivityResultContracts.StartActivityForResult())
        {result: ActivityResult ->

            if (result.resultCode == RESULT_OK) {
                val text = result.data?.getStringExtra("Go1")
                bq.t2.text = text
            }
        }
    }
    fun onClickGo2 (view: View) {
        val i = Intent(this, MainActivity2 :: class.java)
        i.putExtra("Go2", bq.ed1.text.toString())
        setResult(RESULT_OK, i)
        runner.launch(i)
    }
}

MainActivity2 代码

class MainActivity2 : AppCompatActivity() {
    private lateinit var bq: ActivityMain2Binding
    private lateinit var runner2: ActivityResultLauncher<Intent>

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        bq = ActivityMain2Binding.inflate(layoutInflater)
        setContentView(bq.root)

        runner2 = registerForActivityResult(ActivityResultContracts.StartActivityForResult())
        {result: ActivityResult ->

            if (result.resultCode == RESULT_OK) {
                Log.d("MyLog", "Результат ${result.resultCode}")
                val text = result.data?.getStringExtra("Go2").toString()
                bq.t4.text = text
            }
        }
    }
    fun onClickGo1 (view: View) {
        val i = Intent()
        i.putExtra("Go1", bq.ed2.text.toString())
        setResult(RESULT_OK, i)
        finish()
    }
}

问题原因

  1. MainActivity2未读取启动Intent的参数:MainActivity2里错误注册了ActivityResultLauncher,这个组件是用来启动其他Activity并接收结果的,完全没必要。你根本没从启动当前Activity的Intent中获取MainActivity传递的Go2参数。
  2. MainActivity存在冗余代码:onClickGo2里的setResult(RESULT_OK, i)是多余的,MainActivity作为启动方,不需要给自己设置返回结果。

修复方案

修改MainActivity2代码

删掉无用的runner2,在onCreate中直接读取Intent传递的参数:

class MainActivity2 : AppCompatActivity() {
    private lateinit var bq: ActivityMain2Binding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        bq = ActivityMain2Binding.inflate(layoutInflater)
        setContentView(bq.root)

        // 读取MainActivity传递的问题并显示
        val question = intent.getStringExtra("Go2")
        question?.let {
            bq.t4.text = it
        }
    }

    fun onClickGo1 (view: View) {
        val i = Intent()
        i.putExtra("Go1", bq.ed2.text.toString())
        setResult(RESULT_OK, i)
        finish()
    }
}

修改MainActivity代码

删掉onClickGo2里冗余的setResult:

fun onClickGo2 (view: View) {
    val i = Intent(this, MainActivity2::class.java)
    i.putExtra("Go2", bq.ed1.text.toString())
    runner.launch(i)
}

内容的提问来源于stack exchange,提问作者Vadim_Middle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 15:28:28