Как получить полный текст из editText с помощью addTextChangedListener в kotlin - PullRequest
0 голосов
/ 07 мая 2020

Я хотел бы добавить полный текст из editText в массив. Но при запуске этого кода значения массива будут похожи на первое слово, второе слово et c. Как получить полное предложение, и я хочу добавить его в массив (уже сделал это с помощью интерфейса)

Примечание: код размещается на адаптере recyclerview, где texBox - это EditText, а examListener - это используемый интерфейс

Здесь я поделился кодом. Пожалуйста, проверьте это.

 textBox.addTextChangedListener(object : TextWatcher {

                override fun afterTextChanged(s: Editable) {
                    textFromBox = s.toString()
                    examinationListener.addAnswer(textFromBox)
                }

                override fun beforeTextChanged(s: CharSequence, start: Int,
                                               count: Int, after: Int) {

                }

                override fun onTextChanged(s: CharSequence, start: Int,
                                           before: Int, count: Int) {

                }

            })

Ответы [ 3 ]

0 голосов
/ 07 мая 2020

Я создал массив до размера списка. Каждый элемент RecyclerView имеет EditText.

val array = arrayOfNulls<String>(listSize)

Нам нужно знать позицию EditText для добавления в массив. Измените интерфейс следующим образом:

interface ExaminationListener {
   fun addAnswer(text: String, position: Int)
}

function addAnswer:

override fun addAnswer(text: String, position: Int) {
   array[position] = text // we add every changes to the array. 
}

Это использование более полезно. Другие методы нам не нужны:

textBox.doAfterTextChanged { 
   examinationListener.addAnswer(it.toString(), position) // you can use adapterPosition if that is in Viewholder
}

Создаем предложение из элементов массива. Вы можете увидеть ваше предложение полностью:

val sentence = array.filterNotNull().joinToString (separator = " ") { it -> it }

Log.d("Sentence" , sentence)
0 голосов
/ 07 мая 2020

Очень просто, просто добавьте TextWatcher к EditText, например:

    val answerWatcher = object : TextWatcher {
        override fun beforeTextChanged(value: CharSequence, start: Int, count: Int, after: Int) {

        }

        override fun onTextChanged(value: CharSequence, start: Int, before: Int, count: Int) {
            when {
                // Here value is your full text from your EditText
                value.toString().equals("I am a sentence", ignoreCase = true) -> {

                }

                else -> {
                    // Just a test condition
                }

            }
        }

        override fun afterTextChanged(s: Editable) {

        }
    }

    // Add this TextWatcher to your EditText
    edittext.addTextChangedListener(answerWatcher)
0 голосов
/ 07 мая 2020
override fun afterTextChanged(s: Editable) {
    textFromBox = textBox.text.toString()
    examinationListener.addAnswer(textFromBox)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...