Как правильно добавить TextChangeListener для редактирования текста в kotlin? - PullRequest
0 голосов
/ 19 апреля 2020

Поэтому я попытался использовать editText в качестве ввода для записи пользователем даты (из диапазона 1900-2200), используя поле editText, которое я установил в цифру c, например:

idData.inputType = InputType.TYPE_NUMBER_FLAG_SIGNED or InputType.TYPE_CLASS_NUMBER

idData это идентификатор поля ввода. Я хотел, чтобы мое приложение открывало намерение (PelniewRoku) с этим номером в качестве параметра (rok) - поэтому, если число не соответствует ограничению, я не запускал намерение, просто показывая предупреждение пользователя, сохраненное в значениях, как «предупреждение». Код для слушателя (на основе этого простого урока: https://www.tutorialkart.com/kotlin-android/android-edittext-on-text-change/) выглядит следующим образом:

[79]  idData.addTextChangedListener(object: TextWatcher 
        {
            override fun afterTextChanged(s: Editable?)
            {
            }

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

            override fun onTextChanged(s: Int, start: Int, before: Int, count: Int) {
                if (s<2201 and s>1899)
                {
                    var pelnie: Intent = Intent(applicationContext, PelniewRoku::class.java)
                    pelnie.putExtra("algorytm", rodzaj)
                    pelnie.putExtra("rok", s)
                    startActivity(pelnie)
                }
                else
                {
                    Toast.makeText(this, R.string.warning, Toast.LENGTH_LONG).show()
                }
            }

        })

(я также добавляю номер начальной строки этого кода, чтобы облегчить поиск места ошибок)

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

[project and kotlin file path]: (79, 39): Object is not abstract and does not implement abstract member public abstract fun beforeTextChanged(p0: CharSequence!, p1: Int, p2: Int, p3: Int): Unit defined in android.text.TextWatcher
[project and kotlin file path]: (85, 13): 'beforeTextChanged' overrides nothing

[project and kotlin file path]: (89, 13): 'onTextChanged' overrides nothing
[project and kotlin file path]:  (90, 34): The integer literal does not conform to the expected type Boolean


[project and kotlin file path]: (99, 27): None of the following functions can be called with the arguments supplied:
public open fun makeText(p0: Context!, p1: CharSequence!, p2: Int): Toast! defined in android.widget.Toast
public open fun makeText(p0: Context!, p1: Int, p2: Int): Toast! defined in android.widget.Toast

Я делаю все импортные операции - по крайней мере, все, предложенные компилятором.

1 Ответ

0 голосов
/ 20 апреля 2020

Как сказано nnet, вы не можете изменять типы параметров onTextChanged().

Попробуйте это так:

        override fun onTextChanged(string: CharSequence, start: Int, before: Int, count: Int) {
            val nullableInt = string.toString().toIntOrNull() // if string cannot be parsed to Int, toIntOrNull() returns null

            if (nullableInt != null && nullableInt < 2201 && nullableInt > 1899)
            {
                var pelnie: Intent = Intent(applicationContext, PelniewRoku::class.java)
                pelnie.putExtra("algorytm", rodzaj)
                pelnie.putExtra("rok", s)
                startActivity(pelnie)
            }
            else if (string.length == 4)
            {
                Toast.makeText(this, R.string.warning, Toast.LENGTH_LONG).show()
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...