Я новичок в kotlin, и я пытался сделать простой контроллер плюс-минус, поэтому в макете есть две кнопки, Plus и Minus и EditText, обе находятся внутри фрагмента, проблема в том, что когда я пытаюсь ...
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}")
Каким бы способом вы ни предпочли
Проблема в том, что существует несколько методов 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 на каждом шаге с помощью ?
)
Похожие вопросы
Новые вопросы
android
Android - это мобильная операционная система Google, используемая для программирования или разработки цифровых устройств (смартфоны, планшеты, автомобили, телевизоры, одежда, стекло, IoT). Для тем, связанных с Android, используйте специальные теги Android, такие как android-intent, android-activity, android-адаптер и т. Д. Для вопросов, не связанных с разработкой или программированием, но связанных с платформой Android, используйте эту ссылку: https: // android.stackexchange.com .