从动态创建的Edittext

时间:2019-07-12 12:12:15

标签: android kotlin

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

 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)
      }

2 个答案:

答案 0 :(得分:1)

因此,基本上,您具有类似Question的模型。

一种选择是在该模型中添加字段答案,然后在EditText onTextChange()上添加侦听器,然后将更改保存到Question.answer字段中。 使用这种方法时,您已经映射了问答列表。

我认为Pair<Question, Answer?>是一个很好的用例

它可能看起来像这样

  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,这样就不会导致内存泄漏

答案 1 :(得分:0)

有多种方法可以解决此问题。

  1. 动态创建文本时,您可以将文本视图中的文本保存在字符串数组中。
  2. 您可以跟踪文本视图并使用textView.getText()获取文本。
  3. 您可以跟踪文本视图的ID,使用'findViewById()`获取文本视图,然后从文本视图获取文本。

最合适的选择显然取决于您的代码,将来的考虑因素和其他类似条件。