web-dev-qa-db-ja.com

EditText Kotlinでテキストを設定する

私はテキストをedittextに設定しようとしていますが、それはタイプミスマッチが必要です編集可能な文字列が見つかりました

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

私はJavaではなくkotlinを使用しているのでSetTextを使用すると言ってはいけない

74
Paramjeet Singh

editText.textEditableではなくStringを必要とするため、setText(String)を使用してください。

181
nhaarman

EditText.textは最初はStringではなくeditableを必要とするので、setText(String)を使用してください

なぜ?

いい説明 byMichaelの下に与えられた このリンク 。詳細についてはこのリンクにアクセスしてください

Javaのゲッターとセッターのペアの合成プロパティを生成するとき、Kotlinはまずゲッターを探します。ゲッターは、ゲッターのタイプで合成プロパティを作成するのに十分です。一方、設定者のみが存在する場合、プロパティは作成されません。

セッターが場に出ると、不動産の創造はより困難になります。その理由は、ゲッターとセッターのタイプが異なる可能性があるためです。さらに、ゲッターやセッターはサブクラスでオーバーライドされるかもしれません。

27
Rahul Khurana

原則としてgetter .textを使いたい場合は、次のようにします。

nametxt.text = Editable.Factory.getInstance().newEditable(name)
14
Evgeniy Pavlov

ここにはいくつかの実用的な答えがありますが、それでもプロパティ形式を使用してコードをきれいに見せたい場合は、拡張子を書くことができます。

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

あなたはそれからそのようにそれを使うことができます:

mEditText.text = myString.toEditable()
13
BNY

あるいは、拡張プロパティを使うこともできます。

var EditText.value
    get() = this.text.toString()
    set(value) {
            this.setText(value)
    }

そして.text =の代わりに.value =を使用する

2
letroll

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には記載されていません)

2
Abhishek Luthra
editText.setText("Your text here")
0
Masum