私はテキストをedittextに設定しようとしていますが、それはタイプミスマッチが必要です編集可能な文字列が見つかりました
String name = "Paramjeet"
val nametxt = findViewById (R.id.nametxt) as EditText
nametxt.text = name
私はJavaではなくkotlinを使用しているのでSetTextを使用すると言ってはいけない
editText.text
はEditable
ではなくString
を必要とするため、setText(String)
を使用してください。
EditText.text
は最初はStringではなくeditable
を必要とするので、setText(String)
を使用してください
なぜ?
いい説明 byMichaelの下に与えられた このリンク 。詳細についてはこのリンクにアクセスしてください
Javaのゲッターとセッターのペアの合成プロパティを生成するとき、Kotlinはまずゲッターを探します。ゲッターは、ゲッターのタイプで合成プロパティを作成するのに十分です。一方、設定者のみが存在する場合、プロパティは作成されません。
セッターが場に出ると、不動産の創造はより困難になります。その理由は、ゲッターとセッターのタイプが異なる可能性があるためです。さらに、ゲッターやセッターはサブクラスでオーバーライドされるかもしれません。
原則としてgetter .text
を使いたい場合は、次のようにします。
nametxt.text = Editable.Factory.getInstance().newEditable(name)
ここにはいくつかの実用的な答えがありますが、それでもプロパティ形式を使用してコードをきれいに見せたい場合は、拡張子を書くことができます。
fun String.toEditable(): Editable = Editable.Factory.getInstance().newEditable(this)
あなたはそれからそのようにそれを使うことができます:
mEditText.text = myString.toEditable()
あるいは、拡張プロパティを使うこともできます。
var EditText.value
get() = this.text.toString()
set(value) {
this.setText(value)
}
そして.text =の代わりに.value =を使用する
GetterおよびsetterのJava規約(getで始まる名前を持つ引数なしメソッドおよびsetで始まる名前を持つ単一引数メソッド)に従うメソッドは、Kotlinのプロパティとして表されます。しかし、Javaのゲッターとセッターのペアのプロパティを生成している間、Kotlinは最初にゲッターを探します。ゲッターは、ゲッターの型からプロパティの型を推測するのに十分です。一方、設定者のみが存在する場合、プロパティは作成されません(現時点ではKotlinは設定のみのプロパティをサポートしていないため)。
セッターが登場すると、プロパティ生成プロセスは少しあいまいになります。その理由は、ゲッターとセッターのタイプが異なる可能性があるためです。さらに、ゲッターやセッターはサブクラスでオーバーライドされることがあります。これは、AndroidのEditTextの場合とまったく同じです。
上記の場合、Android TextViewクラスにはゲッターが含まれています。
CharSequence getText()
そしてセッターvoid
setText(CharSequence)
私がタイプTextViewの変数を持っていたなら、私のコードはうまくいったでしょう。ただし、オーバーライドされたゲッターを含むEditTextクラスを使用しました
Editable getText()
つまり、EditTextのEditableを取得し、EditableをEditTextに設定できます。したがって、Kotlinは合理的にタイプEditableの合成プロパティテキストを作成します。 Stringクラスは編集可能ではないため、EditTextクラスのtextプロパティにStringインスタンスを割り当てることはできません。
それはJetBrainsがJavaのgetterとsetterメソッドのためのkotlinプロパティを生成する間、getterメソッドの主な役割を指定するのを忘れているように思えます。とにかく、私はgithubを通してJetブレインズコットリンのウェブサイトにpull requestを提出しました。
私はこのメディア記事でも上記の問題について詳しく説明しました KotlinはJavaのゲッターとセッターからプロパティを生成する方法(Jetbrainsには記載されていません)
editText.setText("Your text here")