TextWatcher не работает, я использую Android Studio Kotlin - PullRequest
1 голос
/ 21 января 2020

Я не получаю никаких ошибок при запуске кода, но addTextChangedListener не работает, когда я его выполняю. Я пытаюсь отключить кнопку продолжения, пока пользователь не введет текст. При запуске продолжение все еще включено. Вот мой код

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.text.Editable
import android.text.TextWatcher
import android.widget.Button
import android.widget.EditText



class First_Name_Activity : AppCompatActivity() {

    lateinit var editFirstNameText: EditText
    lateinit var btnOpenActivity: Button

    override fun onCreate(savedInstanceState: Bundle?) {

        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_first_name)


        editFirstNameText = findViewById(R.id.first_name_edit_text)
        btnOpenActivity = findViewById(R.id.first_name_continue_btn)


        editFirstNameText.addTextChangedListener(object : TextWatcher {
            override fun afterTextChanged(s: Editable?) {

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

            override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
                btnOpenActivity.isEnabled=true
            }
        }
        btnOpenActivity.setOnClickListener {
            val intent = Intent(this, Last_Name_Activity::class.java)
            startActivity(intent)
            overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left)

        }

    }
        override fun finish() {
        super.finish()
        overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_right)

        }
}

Ответы [ 6 ]

0 голосов
/ 21 января 2020

Привет, это будет работать для вас ...

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_sample_text_watcher)
    btnOpenActivity.setOnClickListener(View.OnClickListener {  })

    editFirstNameText.addTextChangedListener(object : TextWatcher {
        override fun afterTextChanged(s: Editable?) {

            if (s != null) {
                btnOpenActivity.isEnabled = s.trim().isNotEmpty()
            }

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

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

        }
    })



}

happy_coding:)

0 голосов
/ 21 января 2020

Отредактируйте ваш код следующим образом

editFirstNameText.addTextChangedListener(object : TextWatcher {
    override fun afterTextChanged(s: Editable?) {

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

    override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
            //btnOpenActivity.isEnabled==true
            //Change this line to line bellow
            btnOpenActivity.isEnabled==!s.toString().isEmpty()

    }
 })//you miss this bracket ')' in your code
0 голосов
/ 21 января 2020

Сначала проверьте, что текст редактирования пуст или нет, затем введите код ниже в textwatcher

If(s?.isEmpty()){
    btnOpenActivity.isEnabled

}   
0 голосов
/ 21 января 2020

Вы можете проверить наличие пустого текста в тексте редактирования,

override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
    if (!s.toString().isEmpty()) {
       btnOpenActivity.isEnabled=true
    } else {
       btnOpenActivity.isEnabled=false
    }
}

или

override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
     if (!editFirstNameText.text.toString().trim().isEmpty()) {
         btnOpenActivity.isEnabled=true
     } else {
         btnOpenActivity.isEnabled=false
     }
}
0 голосов
/ 21 января 2020

Вы упомянули «При запуске продолжение все еще включено» . Вы установили отключение кнопки в XML или через код (в методе onCreate), чтобы она была отключена при запуске приложения? После этого вы можете сделать:

override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
    btnOpenActivity.isEnabled = s?.isNotBlank() == true
}
0 голосов
/ 21 января 2020

onTextChanged() можно вызывать, даже если CharSequence пусто или равно нулю. Существует очень простое решение вашей проблемы, нулевая и непустая проверка:

override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
    if(s != null && s.isNotEmpty()){
       btnOpenActivity.isEnabled=true
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...