Android 从动态创建的Edittext获取数据

Android 从动态创建的Edittext获取数据,android,kotlin,Android,Kotlin,我创建了一些动态文本视图。我想在用户单击next按钮时获取TextView的文本。 我已经编写了在适配器类中创建EditText的逻辑。 我的活动中有一个按钮,单击该按钮,我想从adapter类中动态创建的文本视图中获取所有文本 if(input_type=="text") { holder.question.text=questionsList!![position].question val tableRow = TableRow(context)

我创建了一些动态文本视图。我想在用户单击next按钮时获取TextView的文本。 我已经编写了在适配器类中创建EditText的逻辑。 我的活动中有一个按钮,单击该按钮,我想从adapter类中动态创建的文本视图中获取所有文本

 if(input_type=="text")
    {
        holder.question.text=questionsList!![position].question
        val tableRow = TableRow(context)
        tableRow.layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
        var ansEditText = EditText(context)
        ansEditText.setPadding(5,5,5,15)
        ansEditText.setHint("Answer")
        ansEditText.setTextColor(Color.parseColor("#000000"))
        ansEditText.textSize= 20F
        tableRow.addView(ansEditText)
        holder.linearQuestionanire.addView(tableRow)
      }

有多种方法可以解决这个问题

动态创建文本视图时,可以将文本保存在文本视图中的字符串数组中。 您可以跟踪文本视图,并使用textView.getText获取文本。 您可以跟踪textview的ID,使用'findViewById'获取textview,然后从textview获取文本。
最合适的选择显然取决于您的代码、未来考虑因素和其他类似标准。

所以基本上您有类似问题的模型

一个选项是将字段答案添加到该模型中,并在文本更改后在EditText-onTextChange上添加侦听器将更改保存到问答字段。 使用此方法时,您将已经映射了问题-答案列表

我认为这对是很好的用例

它可能看起来像这样

  if (input_type == "text") {
            val question = questionsList!![position]
            holder.question.text = question.question
            val tableRow = TableRow(context)
            tableRow.layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
            var ansEditText = EditText(context)
            ansEditText.setPadding(5, 5, 5, 15)
            ansEditText.setHint("Answer")
            ansEditText.setTextColor(Color.parseColor("#000000"))
            ansEditText.textSize = 20F
            tableRow.addView(ansEditText)
            holder.linearQuestionanire.addView(tableRow)

            ansEditText.addTextChangedListener(object : TextWatcher {
                override fun afterTextChanged(s: Editable?) {
                    question.answer = s.toString()
                }

                override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
                    // Empty
                }

                override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
                    // Empty
                }
            })
        }

另外,不要忘记删除TextWatcher,以免造成内存泄漏

共享创建这些文本的代码不是从第一个字母到最后一个字母的文本不是最终文本?您还可以尝试收听EditText的焦点更改,并确定输入何时完成,但这可能不太准确,我只能获取最后一个editText值。我是否可以将正在创建的模型存储在某个数组中,然后从activityadapter访问该数组?adapter仅引用您的列表,因此基本上您在adapter中编辑的内容也应该在列表中编辑,当您按“提交”按钮时,只需从“主要问题/答案”列表中获取所有添加的值。我是否可以创建一个模型类,将问题和答案存储在某个键值对中,然后在我的活动中获取值。。???