Я пытаюсь установить текст в EditText, но он говорит:
Type mismatch.
Required: Editable
Found: String
Мой код выглядит следующим образом:
String name = "Paramjeet"
val nametxt = findViewById (R.id.nametxt) as EditText
nametxt.text = name
Не говорите, чтобы использовать, setText
потому что я использую kotlin, а не Java.
android
kotlin
android-edittext
Парамжит Сингх
источник
источник
nexttxt.setText(name)
без каких-либо находок или кастинга.Ответы:
Используйте
setText(String)
, так какeditText.text
ожидаетEditable
, а неString
.источник
Используйте,
setText(String)
какEditText.text
требуетсяeditable
на первом месте, а не StringЗАЧЕМ ?
Nice объяснения по Майклу предоставляется по этой ссылке . Посетите эту ссылку для более подробной информации
При генерации синтетического свойства для пары получатель / установщик Java Kotlin сначала ищет получатель. Получателя достаточно, чтобы создать синтетическое свойство с типом получателя. С другой стороны, свойство не будет создано, если присутствует только установщик.
Когда сеттер входит в игру, создание свойств становится более сложным. Причина в том, что геттер и сеттер могут иметь разные типы. Кроме того, получатель и / или установщик могут быть переопределены в подклассе.
источник
Здесь есть несколько рабочих ответов, но если вы все еще хотите использовать формат свойства и ваш код выглядит чистым, вы можете написать расширение:
Затем вы можете использовать его как таковой:
источник
Если вы хотите использовать getter
.text
из принципа, используйте:источник
Или вы можете использовать свойство extension:
и использовать
.value=
вместо.text=
источник
Методы, которые следуют соглашениям Java для методов получения и установки (методы без аргументов с именами, начинающимися с get, и методы с одним аргументом с именами, начинающимися с set), представлены как свойства в Kotlin. Но, генерируя свойство для пары геттер / сеттер Java, Kotlin сначала ищет геттер. Получателя достаточно, чтобы вывести тип свойства из типа получателя. С другой стороны, свойство не будет создано, если присутствует только установщик (потому что Kotlin не поддерживает свойства только для набора в настоящее время).
Когда сеттер вступает в игру, процесс генерации свойств становится немного неоднозначным. Причина в том, что геттер и сеттер могут иметь разные типы. Более того, геттер и / или сеттер могут быть переопределены в подклассе, что в точности относится к EditText в Android.
В вышеприведенном случае класс Android TextView содержит геттер
и сеттер пустоты
Если бы у меня была переменная типа TextView, мой код работал бы нормально. Но я использовал класс EditText, который содержит переопределенный метод получения
Это означает, что вы можете получить Editable для EditText и установить Editable для EditText. Поэтому Kotlin разумно создает синтетический текст свойства типа Editable. Так как класс String не является редактируемым, поэтому я не могу назначить экземпляр String свойству text класса EditText.
Похоже, что JetBrains забыл указать доминирующую роль методов-получателей при создании свойств kotlin для методов-получателей и сеттеров Java. В любом случае, я отправил запрос на загрузку на сайт Jet Brains kotlin через github.
Я подробно описал вышеупомянутую проблему в этой публикации среднего уровня. Как Kotlin генерирует свойство из методов получения и установки Java (недокументировано Jetbrains)
источник
У меня была та же проблема в моих проектах, я привожу вам пример, который показывает, как получать и задавать данные в макетах с помощью Kotlin: есть одна кнопка
save_button
и два поля для редактирования текстаedit_name
иedit_password
.источник
Простое решение
Просто используйте
edittext.setText(yourdata
), а неedittext.text
потому, что EditText редактируемый,edittext.text
используется дляTextView
Например:
Вот и все его работа для меня.
источник
Используйте как это:
источник
setText (String), поэтому вы должны установить текст вашей строки для editText, поэтому в вашем случае это: nametxt.setText (name)
источник
Или приведение к,
TextView
но я считаю, что это должно быть исправлено на стороне kotlin наверняка для удобства разработчиков!Или с некоторыми расширениями:
Ты можешь написать:
или
Но, к сожалению, вы просто не можете написать простой
someEditText.text = "someTextValue"
источник
Посмотрите на API EditText:
void setText (CharSequence text, TextView.BufferType type)
Editable getText ()
Ссылка: https://developer.android.com/reference/android/widget/EditText.html
источник
Попробуйте использовать nametxt.post: nametxt.post ({nametxt.setText ("ваш текст")})
источник