android - initialize - text view kotlin




Настройка текста в EditText Kotlin (7)

Я пытаюсь установить текст в EditText, но он говорит:

String name = "Paramjeet"
val nametxt = findViewById (R.id.nametxt) as EditText
nametxt.text = name

Мой код выглядит следующим образом:

nametxt.text = Editable.Factory.getInstance().newEditable(name)

Не говорите использовать setText потому что я использую kotlin, а не Java.


setText (String), поэтому вы должны установить текст вашей строки для editText, поэтому в вашем случае это: nametxt.setText (name)


Если вы хотите использовать getter .text из принципа, используйте:

fun String.toEditable(): Editable =  Editable.Factory.getInstance().newEditable(this)

Или вы можете использовать свойство extension:

CharSequence getText() 

и используйте .value= вместо .text=


Используйте setText(String) , так как editText.text ожидает Editable , а не String .


Методы, которые следуют соглашениям Java для методов получения и установки (методы без аргументов с именами, начинающимися с get, и методы с одним аргументом с именами, начинающимися с set), представлены как свойства в Kotlin. Но, генерируя свойство для пары геттер / сеттер Java, Kotlin сначала ищет геттер. Получателя достаточно, чтобы вывести тип свойства из типа получателя. С другой стороны, свойство не будет создано, если присутствует только установщик (потому что Kotlin не поддерживает свойства только для набора в настоящее время).

Когда сеттер вступает в игру, процесс генерации свойств становится немного неоднозначным. Причина в том, что геттер и сеттер могут иметь разные типы. Более того, геттер и / или сеттер могут быть переопределены в подклассе, что в точности относится к EditText в Android.

В вышеприведенном случае класс Android TextView содержит геттер

setText(CharSequence)

и сеттер пустоты

Editable getText()

Если бы у меня была переменная типа TextView, мой код работал бы нормально. Но я использовал класс EditText, который содержит переопределенный метод получения

editText.setText("Your text here")

Это означает, что вы можете получить Editable для EditText и установить Editable для EditText. Поэтому Kotlin разумно создает синтетический текст свойства типа Editable. Поскольку класс String не является редактируемым, поэтому я не могу назначить экземпляр String свойству text класса EditText.

Похоже, что JetBrains забыл указать доминирующую роль методов-получателей при создании свойств kotlin для методов-получателей и сеттеров Java. В любом случае, я отправил запрос на загрузку на сайт Jet Brains kotlin через github.

Я подробно описал вышеупомянутую проблему в этой публикации среднего уровня. Как Kotlin генерирует свойство из методов получения и установки Java (недокументировано Jetbrains)


Попробуйте использовать nametxt.post: nametxt.post ({nametxt.setText ("ваш текст")})


 editText.setText("Your text here") 




android-edittext