gpt4 book ai didi

Android 访问 onCreate Activity 之外的 View 绑定(bind) val

转载 作者:行者123 更新时间:2023-12-05 00:13:17 24 4
gpt4 key购买 nike

我有一个有按钮的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com