首页 > 解决方案 > 如何使用 Kotlin 从 Android 中动态选择的文本输入框中获取文本输入?

问题描述

我有一个名为input_xx 是数字的多个 TextInput(例如 input_1、input_2 等)。我还有多个名为btn_xx 是数字的按钮(例如 btn_1、btn_2 等)。

btn_x按下 a 时,我应该能够打印与 x 值匹配的输入值(例如,当按下 btn_2 时,将打印 input_2 中的值。)

这是我目前不起作用的尝试:

fun handleClickButton (view: View) {
    with (view as Button) {
        var this_btn = view.resources.getResourceEntryName(id)
        val id_string = this_btn
        val delim = "_"
        val arr = id_string.split(delim).toTypedArray()
        val id_num = arr[2]
        val this_input = "input_" + arr[2].toString()
        print(binding.this_input.text)
    }
}

任何帮助将不胜感激!我对 android 开发和 Kotlin 非常陌生。

标签: androidkotlin

解决方案


以下是需要解决的问题:

  • arr[2]当 的长度为 2 时得到arr;所以这应该是arr[1]因为数组是 0-baed 索引以避免ArrayIndexOutOfBoundsException
  • binding使用此表达式在对象上调用文本值,binding.this_input并且binding需要具有视图 ID:

不确定是否可以将 int 的视图绑定用作视图 ID,因为该视图的此引用名称未在生成的绑定类中注册。

但至少您可以通过以下方式实现findViewById

在您的代码中应用它:

fun handleClickButton(view: View) {
    with(view as Button) {
        val this_btn = view.resources.getResourceEntryName(id)
        val id_string = this_btn
        val delim = "_"
        val arr = id_string.split(delim).toTypedArray()
        val id_num = arr[1]
        val this_input = "input_" + arr[1]
        val id = resources.getIdentifier(this_input, "id", context.packageName)
        val input = this@MainActivity.findViewById<EditText>(id)
        print(input.text)
    }
}

注意:我假设周围的活动为MainActivity,您可以将其替换为您的活动,因为省略它将findViewById()在按钮上被调用。


推荐阅读