Estou tentando definir texto em um EditText, mas ele diz:
Type mismatch.
Required: Editable
Found: String
Meu código é o seguinte:
String name = "Paramjeet"
val nametxt = findViewById (R.id.nametxt) as EditText
nametxt.text = name
Não diga para usar setText
porque estou usando o kotlin, não o Java.
android
kotlin
android-edittext
Paramjeet Singh
fonte
fonte
nexttxt.setText(name)
sem encontrar ou transmitir.Respostas:
Use
setText(String)
, já queeditText.text
espera umEditable
, não umString
.fonte
Use
setText(String)
comoEditText.text
requer umeditable
no primeiro lugar, não StringPORQUE ?
Boa explicação de Michael dada neste link . Visite este link para obter mais detalhes
Ao gerar uma propriedade sintética para um par getter / setter Java, o Kotlin primeiro procura um getter. O getter é suficiente para criar uma propriedade sintética com um tipo de getter. Por outro lado, a propriedade não será criada se apenas um levantador apresentar.
Quando um levantador entra em jogo, a criação de propriedade se torna mais difícil. O motivo é que o getter e o setter podem ter tipos diferentes. Além disso, o getter e / ou o setter podem ser substituídos em uma subclasse.
fonte
Existem várias respostas úteis aqui, mas se você ainda quiser usar o formato da propriedade e deixar seu código limpo, poderá escrever uma extensão:
Você pode usá-lo como tal:
fonte
Se você deseja usar o getter
.text
from princípio, use:fonte
Ou você pode usar uma propriedade de extensão:
e use em
.value=
vez de.text=
fonte
Os métodos que seguem as convenções Java para getters e setters (métodos sem argumento com nomes começando com get e métodos de argumento único com nomes começando com set) são representados como propriedades no Kotlin. Porém, ao gerar uma propriedade para um par getter / setter Java, o Kotlin primeiro procura por um getter. O getter é suficiente para inferir o tipo de propriedade do tipo do getter. Por outro lado, a propriedade não será criada se apenas um setter estiver presente (porque o Kotlin não suporta propriedades somente de set no momento).
Quando um levantador entra em ação, o processo de geração de propriedade se torna um pouco ambíguo. O motivo é que o getter e o setter podem ter tipos diferentes. Além disso, o getter e / ou o setter podem ser substituídos em uma subclasse, o que é exatamente o caso do EditText no Android.
No caso acima, a classe Android TextView contém um getter
e um setter vazio
Se eu tivesse uma variável do tipo TextView, meu código teria funcionado bem. Mas eu usei a classe EditText que contém um getter substituído
o que significa que você pode obter um Editável para um EditText e definir um Editável como um EditText. Portanto, Kotlin cria razoavelmente um texto de propriedade sintético do tipo Editável. Como a classe String não é editável, é por isso que não posso atribuir uma instância de String à propriedade text da classe EditText.
Parece que o JetBrains esqueceu de especificar o papel dominante dos métodos getter ao gerar propriedades kotlin para os métodos getter e setter Java. De qualquer forma, enviei uma solicitação de recebimento ao site da Jet brains kotlin através do github.
Também detalhei o problema acima neste post médio Como o Kotlin gera propriedades a partir de Java Getters e Setters (Não documentado por Jetbrains)
fonte
Eu tive o mesmo problema em meus projetos. Dou um exemplo que mostra como recuperar e definir dados nos layouts usando o Kotlin: há um botão
save_button
e dois campos de edição de textoedit_name
eedit_password
.fonte
Solução Simples
Basta usar
edittext.setText(yourdata
) em vez deedittext.text
porque o EditText é editável, oedittext.text
é usado paraTextView
Por exemplo:
É isso que funciona para mim.
fonte
Use assim:
fonte
setText (String), então você deve setText sua string para editText, portanto, no seu caso, é: nametxt.setText (name)
fonte
Ou elenco para
TextView
mas acredito que esta deve ser fixado no lado Kotlin com certeza para facilidade de desenvolvedores!Ou com algumas extensões:
Você pode escrever:
ou
Mas, infelizmente, você simplesmente não pode escrever simples
someEditText.text = "someTextValue"
fonte
Veja a API do EditText:
void setText (CharSequence text, TextView.BufferType type)
Editable getText ()
Link: https://developer.android.com/reference/android/widget/EditText.html
fonte
Tente usar nametxt.post: nametxt.post ({nametxt.setText ("seu texto")})
fonte