我有一个有按钮的 Activity 。在按钮上单击我想更新 TextView 中的文本。
我想使用 ViewBinding
而不是普通的 findViewById
这就是我创建 val 绑定(bind)的方式
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding = ActivityMainBinding.inflate(layoutInflater);
setContentView(binding.root)
binding.btnRoll.setOnClickListener {
rollDice()
}
}
现在在 rollDice
中,我想更新 TextView ,但我无法访问有意义的绑定(bind),因为它的范围仅限于 onCreate()
,所以这方面的最佳做法是什么?
private fun rollDice() {
val random = Random().nextInt(6) + 1
binding.txt_random.setText("random")
}
最佳答案
你有两个选择。
1。存储在属性中
由于 Activity 的膨胀内容完全绑定(bind)到它的生命周期,将引用作为属性保存是安全的
class MainActivity : AppCompatActivity() {
lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater);
setContentView(binding.root)
binding.btnRoll.setOnClickListener {
rollDice()
}
}
private fun rollDice() {
val random = Random().nextInt(6) + 1
binding.txt_random.setText("random")
}
}
2。将绑定(bind)传递给方法
这就是我通常做的,它避免了创建一个不是真正必要的属性
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding = ActivityMainBinding.inflate(layoutInflater);
setContentView(binding.root)
binding.btnRoll.setOnClickListener {
rollDice(binding)
}
}
private fun rollDice(binding: ActivityMainBinding) {
val random = Random().nextInt(6) + 1
binding.txt_random.setText("random")
}
}
这两个选项都是使绑定(bind)对 Activity 方法可见的有效方法。
关于Android 访问 onCreate Activity 之外的 View 绑定(bind) val,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66571234/