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

标签 android kotlin android-viewbinding

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

相关文章:

android - YouTube Android Player API 突然停止工作

java - 如何仅在某些异步执行完成后才执行代码?

android - ViewBinding vs Kotlin Android Extensions 与合成 View

java - 将 Intent 转换为字符串,反之亦然

带叠加层的 Android 应用介绍

android - 在 Android 的内部布局中设置文本字段的值

spring-boot - 构建一个可以使用 `publishToMavenLocal` 发布到 maven 本地存储库的可执行 jar - spring boot 项目

android-gradle-plugin - 使用 AGP 4.2.0 或 7.0 时未为 androidTests 生成 R 文件

Android ViewBinding 与 CustomView

Android Wear - Gradle 依赖问题 "Cannot resolve symbol"