【问题标题】:How to refer to a dynamically generated button?如何引用动态生成的按钮?
【发布时间】:2019-04-22 12:19:08
【问题描述】:

我正在尝试与动态生成的按钮进行交互。我想为点击的玩家以及点击时靠近水平或垂直轴的玩家更新文本和背景颜色。

我尝试过的。我在 XML 中找到了一个按钮的 id 属性,这让我想到我可以创建一个文本键来引用以编程方式生成的按钮。但是当我尝试分配一个 id 时 - IDE 需要一个数字 (Int),而不是一个字符串。由于按钮形成一个方形数组 - 我决定通过 4 位数字对每个按钮进行编码,其中前 2 位数字代表行号,另外两个代表列号。虽然当我尝试使用 findViewById 时,IDE 告诉我它需要一个特殊的 id 数据类型,而不是数字。

这就是现在的样子:

for (i in 1..size) {
    for (j in 1..size){
        val button = Button(this)
        button.id = i*100 + j
        constraintLayout.addView(button)
    }
}

我可以看看什么想法或方法?

【问题讨论】:

  • 关于特殊 ID 数据类型的 IDE 消息来自 lint。你应该能够压制它。将光标放在有问题的行上,然后按 alt-enter。应该有一个菜单项。
  • 如果您只有带有 id 的自定义按钮,您可以获取协调器布局的所有子元素并对其进行迭代。
  • 迈克,谢谢!我尝试使用 val btn = constraintLayout.findViewById(101) as Button 并通过 toast 我能够通过 确认它是正确的按钮btn.text.toString()

标签: android kotlin button


【解决方案1】:

如果您是动态创建的,则可以将其保存在变量(或数组)中以供以后使用。

val myButtons = ArrayList<Button>()

for (i in 1..size) {
    for (j in 1..size){
        val button = Button(this)
        myButtons.add(button)
        constraintLayout.addView(button)
    }
}

如果您有一个包含动态创建视图的布局并且您知道它们的顺序,您可以通过getChildAt(index) 获取它们。

或者,您可以分配保存在 xml like this 中的 id。

【讨论】:

  • 如果您设置了按钮 ID,您是否可以像使用 XML 文件中的视图一样通过 ID 访问它?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-17
  • 2013-01-02
  • 2011-05-13
  • 2019-06-02
  • 2022-12-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多