Kotlin中为何无法将SecondActivity的EditText值传递到MainActivity的TextView?
Activity间传值问题解决:EditText内容无法传递到MainActivity
问题根源
- 数据类型不匹配:EditText的
info.text返回Editable类型,而getStringExtra仅能读取String类型数据,直接传递会导致取值失败。 - 错误的启动方式:当前代码通过
startActivity创建新的MainActivity实例,而非返回原有实例,所以原有MainActivity的TextView不会更新。
修改后的代码
MainActivity
class MainActivity : ComponentActivity() { private val secondActivityResult = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result -> if (result.resultCode == RESULT_OK) { val message = result.data?.getStringExtra("key") findViewById<TextView>(R.id.textView).text = message } } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) } fun goSecondActivity(view: View){ val intent = Intent(this, SecondActivity::class.java) secondActivityResult.launch(intent) } }
SecondActivity
class SecondActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.second_activity) val button = findViewById<Button>(R.id.button3) val infoEditText = findViewById<EditText>(R.id.editTextText) button.setOnClickListener { val resultIntent = Intent() // 将Editable转为String后传递 resultIntent.putExtra("key", infoEditText.text.toString()) setResult(RESULT_OK, resultIntent) finish() } } }
关键修改说明
- 使用AndroidX推荐的
registerForActivityResult机制接收返回结果,替代旧的startActivityForResultAPI。 - SecondActivity通过
setResult返回数据,调用finish()关闭自身,回到原MainActivity实例。 - 传递数据时将EditText的
Editable内容转为String,确保getStringExtra能正确读取。
内容的提问来源于stack exchange,提问作者Антон
相关产品推荐
相关产品推荐

