You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio(Kotlin)如何获取动态创建EditText的文本内容

如何获取动态创建EditText的文本内容

我来帮你搞定这个问题!你已经实现了动态创建EditText的功能,现在要在点击Finish按钮时拿到这些输入框的内容,这里有两种实用的方法:

方法一:通过Tag遍历布局子View

你给每个动态EditText设置了以ExtraField开头的Tag,我们可以利用这个标记,遍历LinearLayout里的所有子View,筛选出目标EditText并获取内容:

Finish.setOnClickListener {
    var x = 0
    val userId = mAuth.currentUser!!.uid
    val mcDatabase = FirebaseDatabase.getInstance().reference

    // 先确认LinearLayout不为空,再遍历子View
    LinearLayout?.let { layout ->
        for (child in layout.children) {
            // 判断当前子View是EditText,且Tag符合我们设置的规则
            if (child is EditText && child.tag.toString().startsWith("ExtraField")) {
                val inputText = child.text.toString().trim()
                // 只处理非空内容(可选,根据你的需求调整)
                if (inputText.isNotEmpty()) {
                    // 这里把内容存入Firebase,你可以根据实际需求修改逻辑
                    mcDatabase.child("users").child(userId).child("todo$x").setValue(inputText)
                    x++
                }
            }
        }
    }
}

方法二:维护一个列表存储动态EditText(更高效)

如果你的LinearLayout里还有其他EditText,遍历子View可能会误判,这时可以在创建EditText时就把它们存入一个列表,后续直接遍历这个列表即可,效率更高:

第一步:在类中定义一个MutableList

// 在你的Activity/Fragment类里声明这个列表
private val dynamicEditTexts = mutableListOf<EditText>()

第二步:修改创建EditText的函数,把新创建的EditText加入列表

private fun AddToDoItem() {
    val editText = EditText(this)
    // 注意你之前连续设置了两次gravity,最后一次CENTER会覆盖TOP,这里保留你最终需要的属性
    editText.gravity = Gravity.CENTER
    editText.tag = "ExtraField" + i
    LinearLayout?.addView(editText)
    // 将新创建的EditText添加到列表中
    dynamicEditTexts.add(editText)
    i++
}

第三步:在Finish点击监听中遍历列表获取内容

Finish.setOnClickListener {
    var x = 0
    val userId = mAuth.currentUser!!.uid
    val mcDatabase = FirebaseDatabase.getInstance().reference

    // 直接遍历我们维护的动态EditText列表
    dynamicEditTexts.forEach { editText ->
        val inputText = editText.text.toString().trim()
        if (inputText.isNotEmpty()) {
            mcDatabase.child("users").child(userId).child("todo$x").setValue(inputText)
            x++
        }
    }
}

另外提个小建议:Kotlin里变量名一般用小驼峰命名,比如把EditText改成editText会更符合代码规范哦~

内容的提问来源于stack exchange,提问作者StarToLeft

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:10:56