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

Kotlin应用启动时MainActivity的TextView显示为空问题求助

双Activity传值导致MainActivity启动时TextView为空的解决方法

问题原因

应用首次启动MainActivity时,启动它的Intent并未携带Name这个Extra参数,intent.getStringExtra("Name")会返回null,直接将这个null值赋值给TextView的text属性,就会覆盖布局里预设的默认文本"Welcome",导致启动时显示为空。

基础修复方案

给获取到的name设置默认值,当name为null时使用默认的"Welcome",修改MainActivity代码如下:

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val result = findViewById<TextView>(R.id.nomeUser)
        val nameEntered = findViewById<EditText>(R.id.nameEntered)
        val button = findViewById<Button>(R.id.button)

        button.setOnClickListener{
            val name = nameEntered.text.toString()
            val intent = Intent(this@MainActivity, NomeEscrito::class.java)
            intent.putExtra("Name", name)
            startActivity(intent)
        }

        // 为name设置默认值,避免null导致文本为空
        val name = intent.getStringExtra("Name") ?: "Welcome"
        result.text = name
    }
}

更规范的传值优化(可选)

当前从SecondActivity启动MainActivity会创建新的实例,而非回到原有的MainActivity,这不符合常规的页面返回逻辑。推荐使用registerForActivityResult实现数据回传:

修改后的MainActivity代码

class MainActivity : AppCompatActivity() {
    // 注册Activity结果回调
    private val getBackResult = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
        if (result.resultCode == RESULT_OK) {
            val data = result.data
            val name = data?.getStringExtra("Name") ?: "Welcome"
            findViewById<TextView>(R.id.nomeUser).text = name
        }
    }

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

        val result = findViewById<TextView>(R.id.nomeUser)
        val nameEntered = findViewById<EditText>(R.id.nameEntered)
        val button = findViewById<Button>(R.id.button)

        // 首次启动直接设置默认文本
        result.text = "Welcome"

        button.setOnClickListener{
            val name = nameEntered.text.toString()
            val intent = Intent(this@MainActivity, NomeEscrito::class.java)
            intent.putExtra("Name", name)
            // 通过回调启动Activity
            getBackResult.launch(intent)
        }
    }
}

修改后的NomeEscrito(SecondActivity)代码

class NomeEscrito : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_nome_escrito)

        val intent = intent
        val name = intent.getStringExtra("Name")
        val result = findViewById<TextView>(R.id.result)
        result.text = name

        val wordEntered = findViewById<EditText>(R.id.textPhrase)
        val button2 = findViewById<Button>(R.id.button2)

        button2.setOnClickListener{
            val name2 = wordEntered.text.toString()
            // 回传数据给上一个Activity
            val intent2 = Intent()
            intent2.putExtra("Name", name2)
            setResult(RESULT_OK, intent2)
            // 关闭当前Activity,回到原MainActivity
            finish()
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 19:01:15