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
相关产品推荐
相关产品推荐

