Android Studio ViewBinding设置TextView文本不生效问题求助
BirthdayGreetingActivity页面文本不更新问题修复
问题现象
- 程序运行无任何报错,但页面问候文本始终不发生变更
- 已通过Logcat验证,
name参数已从MainActivity.kt成功传递到BirthdayGreetingActivity.kt - 初步怀疑
binding.birthdayGreeting.text = "Happy Birthday $name"代码未正常生效
问题根因
ViewBinding使用逻辑错误:你已经通过ActivityBirthdayGreetingBinding.inflate(layoutInflater)加载了布局实例并生成对应的binding对象,但setContentView()传入的参数是R.layout.activity_birthday_greeting,这会让Activity重新加载一份完全独立的布局实例显示在屏幕上。你后续修改文本的操作,作用在binding持有的那份未被显示到屏幕上的布局控件上,屏幕上展示的是另一份独立加载的布局内容,自然看不到文本变化。
原有代码参考
MainActivity.kt(逻辑无问题,无需修改)
package com.example.firstapp import android.content.Intent import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.view.View import com.example.firstapp.databinding.ActivityMainBinding class MainActivity : AppCompatActivity() { private lateinit var binding: ActivityMainBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) } fun createBirthdayCard(view: View){ val name = binding.nameInput.editableText.toString() val intent = Intent(this,BirthdayGreetingActivity::class.java) intent.putExtra(BirthdayGreetingActivity.NAME_EXTRA,name) startActivity(intent) } }
原BirthdayGreetingActivity.kt(存在错误)
package com.example.firstapp import android.os.Bundle import android.util.Log import androidx.appcompat.app.AppCompatActivity import com.example.firstapp.databinding.ActivityBirthdayGreetingBinding class BirthdayGreetingActivity : AppCompatActivity() { private lateinit var binding: ActivityBirthdayGreetingBinding companion object{ const val NAME_EXTRA ="name_extra" } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityBirthdayGreetingBinding.inflate(layoutInflater) // 错误代码行 setContentView(R.layout.activity_birthday_greeting) val name = intent.getStringExtra(NAME_EXTRA) binding.birthdayGreeting.text = "Happy Birthday $name" } }
修复方案
将BirthdayGreetingActivity中setContentView(R.layout.activity_birthday_greeting)替换为setContentView(binding.root),让Activity显示binding持有的布局实例,后续对binding内控件的修改就会正常反映到可见页面上。
修复后BirthdayGreetingActivity核心代码段:
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityBirthdayGreetingBinding.inflate(layoutInflater) // 修复后代码 setContentView(binding.root) val name = intent.getStringExtra(NAME_EXTRA) binding.birthdayGreeting.text = "Happy Birthday $name" }
修改完成后重新运行App,即可看到问候文本正常展示传递过来的name值。
:) :) 非常感谢大家抽出宝贵时间提供帮助 :) :)
内容的提问来源于stack exchange,提问作者Prems Finance
相关产品推荐
相关产品推荐

