【问题标题】:onTextChange, create new EditText in LinearLayoutonTextChange,在 LinearLayout 中新建 EditText
【发布时间】:2022-08-14 11:14:41
【问题描述】:

我正在创建一个数据库,其中包含用户可输入的房间数量。对于该数量,我想创建 EditText 字段,然后用户可以在其中输入空间的个性化名称,而不是我生成的通用名称。

我以为我已经弄清楚如何解析来自初始 Child EditText 字段的数据并将新的 EditText 添加到具有提供的数量的适当布局中,但它似乎不起作用。

我已经粘贴了布局 XML 的示例以及支持我目前为完成此任务所做的工作的相关代码。

我想添加用户可设置名称行以挂起来自 input_brQty 字段的输入的布局。如果重要,此线性布局位于 ScrollView 内

<LinearLayout
                    android:layout_width=\"match_parent\"
                    android:layout_height=\"48dp\"
                    android:orientation=\"horizontal\">

                    <EditText
                        android:id=\"@+id/input_brQty\"
                        android:layout_width=\"48dp\"
                        android:layout_height=\"match_parent\"
                        android:ems=\"10\"
                        android:gravity=\"center\"
                        android:inputType=\"number\" />

                    <TextView
                        android:id=\"@+id/textAddBed\"
                        android:layout_width=\"292dp\"
                        android:layout_height=\"48dp\"
                        android:ems=\"10\"
                        android:gravity=\"\"
                        android:paddingStart=\"8dp\"
                        android:scrollHorizontally=\"false\"
                        android:text=\"Additional Bedrooms\" />
                </LinearLayout>
            </LinearLayout>

用于识别 input_brQty 输入变化的代码。

 // secondary Bedroom QTY
    binding.inputBrQty.doOnTextChanged { text, start, count, after ->
        if (bed.isNotEmpty())
            if (bed.toInt() > 0)
                CreateLayout(bed.toInt(), binding.secBr, \"Secondary Bedroom \", roomList)
    }

执行实际创建和存储创建的 ID 的函数,以便稍后我可以获取数据以推送到数据库。

fun CreateLayout(
    qty: Int,
    parent: LinearLayout,
    textDisplay: String,
    storage: MutableList<String>
) {
    var tmp = 1

    while (tmp < qty) {

        val editText = EditText(this)
        editText.layoutParams = LinearLayout.LayoutParams(
            ViewGroup.LayoutParams.MATCH_PARENT,
            ViewGroup.LayoutParams.WRAP_CONTENT
        )
        editText.setText(textDisplay + tmp)
        editText.isVisible = true
        editText.id = View.generateViewId()

        // Add EditText to LinearLayout
        parent.addView(editText)

        // add to list for retrieval later
        storage.add(editText.id.toString())

        // update iterator
        tmp++
    }
  • 如果我理解您的问题,您需要激活动态编辑文本吗?就像你有一个 edtxt。如果 value_change > 0 ,您需要添加另一个 editext 并在那个 edtxt 中,如果 value_change>0 它会添加新的并递归地继续?请让我知道这是您必须实现的目标。
  • 我有 1 个编辑文本。如果该输入 > 0,我想将这么多 EditText 字段添加到布局中,并填充“名称”并可供用户编辑。当用户单击提交按钮时,我会将这些名称收集到数据库中。
  • 您需要如何添加edittext?
  • 这取决于输入到 input_brQty EditText 字段中的数量。如果用户输入 2,那么我将创建 2 个新字段,如果输入 3,则创建 3 个新字段,依此类推

标签: android kotlin android-edittext onchange


【解决方案1】:

您可能会犯的一个错误是在这里。

if (bed.isNotEmpty())

在这里你可能正在初始化在 onTextChanged 之前。所以新值不会更新为.所以 value 在 initial 将始终为空。把它移到 doOnTextChanged.Something 这样的里面

binding.inputBrQty.doOnTextChanged { text, start, count, after ->
            val bed = text.toString()
            binding.secBr.removeAllViews() //You need this if you want to remove already added view.
            if (bed.isNotEmpty())
                if (bed.toInt() > 0)
                    CreateLayout(bed.toInt(), binding.secBr, "Secondary Bedroom ", roomList)
        }

XML 文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="48dp"
        android:orientation="horizontal">

        <EditText
            android:id="@+id/input_brQty"
            android:layout_width="48dp"
            android:layout_height="match_parent"
            android:ems="10"
            android:gravity="center"
            android:inputType="number" />

        <TextView
            android:id="@+id/textAddBed"
            android:layout_width="292dp"
            android:layout_height="48dp"
            android:ems="10"
            android:gravity=""
            android:paddingStart="8dp"
            android:scrollHorizontally="false"
            android:text="Additional Bedrooms" />
    </LinearLayout>
    <LinearLayout
        android:orientation="vertical"
        android:id="@+id/secBr"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/> // Separate Linear layout for adding dynamic edittext . As we remove existing views.
</LinearLayout>
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-06
    • 2015-07-07
    • 1970-01-01
    • 2015-03-29
    • 1970-01-01
    • 2013-03-12
    • 1970-01-01
    相关资源
    最近更新 更多