【问题标题】:how can I change the text from several TextViews dynamically? [duplicate]如何动态更改多个 TextView 中的文本? [复制]
【发布时间】:2018-10-19 13:34:38
【问题描述】:

我需要使用 for 循环设置布局中已经存在的一些 textView 的文本。例如。 TextView_01、TextView_02 等。有没有办法做类似以下推测代码的事情:

for(1 in 0..6){
       TextView_0(change value with i).text = something
}

【问题讨论】:

  • 创建一个包含 TextViews 的数组或列表。然后你可以走他们。就像你通常会做一个数组一样。还是你想问别的?
  • 你必须定义'TextView'数组。看到这个stackoverflow.com/a/7695052/10242802
  • 感谢 Tim Casteljins,原来的问题回答了我的问题。

标签: android android-studio kotlin


【解决方案1】:

这不是最好的做事方式,但它可能是最通用的,同时避免创建预定义的 TextView 数组:

val base = "TextView_0"

for (i in 1 until 6) {
    val textView = findViewById(resources.getIdentifier("${base}i", "id", packageName)
    textView.text = something
}

我稍微改变了你的 for 循环,因为你有错误的语法。我还将.. 替换为until,因为.. 表示通过 右边界,这可能不是您想要的。如果您确实需要将6 的值设为i,则将其改回..


如果所有 TextViews 在 XML 中的单个父级下,则给该父级一个 ID,然后遍历其子级:

val parent = findViewById(R.id.tvParent)

for (i in 0 until parent.getChildCount()) {
    (container.getChildAt(i) as TextView).text = something
}

【讨论】:

  • 你的第一个解决方案是我的想法,尝试过但没有正常工作,不知何故它产生了一些空的 TextViews 值。正如蒂姆所说,之前有人问过这个问题,是的,处理这个问题的方法是使用数组。谢谢,我会更深入地了解我真正想要的动态语法。
  • 你有多少个TextView?如果它返回空值,那是因为其中一个 ID 不存在。也许TextView_06 不存在?检查你的名字。
【解决方案2】:

你可以使用父容器

    for (i in 0 until container.childCount) {
        (container.getChildAt(i) as TextView).text = something
    }

【讨论】:

    【解决方案3】:

    更好的方法是利用 DataBinding 和 LiveData API,您可以为 TextView 的文本属性分配不同的变量或相同的变量。

    【讨论】:

      猜你喜欢
      • 2017-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-05
      相关资源
      最近更新 更多