Я новичок в kotlin, и я пытался сделать простой контроллер плюс-минус, поэтому в макете есть две кнопки, Plus и Minus и EditText, обе находятся внутри фрагмента, проблема в том, что когда я пытаюсь ...

1
Igor Mytyuk 15 Янв 2021 в 19:01

2 ответа

Лучший ответ

Вы передаете метод int в setText метод. Метод setText перегружен, и он вызывает public final void setText(@StringRes int resid), так как этот метод ожидает int и это тоже строковый ресурс, но int, который вы ему передаете, не является допустимым StringRes поэтому это вызывает ResourceNotFoundException.

Решение состоит в том, чтобы преобразовать int в String, а затем передать его методу setText.

yourTextView.setText((curVal - 1).toString())

Или

yourTextView.setText("${curVal - 1}")

Каким бы способом вы ни предпочли

2
rahat 15 Янв 2021 в 16:22

Проблема в том, что существует несколько методов setText (которые происходят из TextView, который является суперклассом EditText) - один из них принимает единственный параметр Int:

setText(int resid) Устанавливает текст для отображения с использованием строкового идентификатора ресурса.

Так как вы передаете Int, предполагается, что это идентификатор ресурса (такие вещи, как R.id.btnPlus и R.string.coolText просто Int s), но у вас нет идентификатор с этим номером, поэтому он говорит Resource not found.

Вам нужна эта версия:

setText(CharSequence text)

Поэтому вам нужно явно преобразовать целое число в String (который, кстати, является типом CharSequence)

txtQta?.setText((curVal - 1).toString())

Или вы можете сделать это в строке, если хотите

txtQta?.setText("${curVal - 1}")

Кстати, когда вы делаете такие вещи:

val curVal = txtQta?.text.toString().toInt()

Вам нужно добавить ? на каждом шаге, поэтому он будет пропускаться каждый раз, если переданное значение равно нулю, иначе вы можете вызвать toString() для null (что нормально), а затем { {X3}} на этом (что приведет к сбою)

val curVal = txtQta?.text?.toString()?.toInt()

Или если хочешь

val curVal = txtQta?.let { it.text.toString().toInt() }

В обоих случаях curVal будет типом, допускающим значение NULL Int?, потому что это выражение может возвращать значение NULL (поэтому вы проверяете значение NULL на каждом шаге с помощью ?)

0
cactustictacs 15 Янв 2021 в 16:27
65739387