Ich versuche, Text in einem EditText festzulegen, aber es heißt:
Type mismatch.
Required: Editable
Found: String
Mein Code lautet wie folgt:
String name = "Paramjeet"
val nametxt = findViewById (R.id.nametxt) as EditText
nametxt.text = name
Sagen Sie nicht zu verwenden, setText
weil ich Kotlin verwende, nicht Java.
android
kotlin
android-edittext
Paramjeet Singh
quelle
quelle
nexttxt.setText(name)
ohne Fund oder Casting anrufen können.Antworten:
Verwenden Sie
setText(String)
, daeditText.text
erwartet einEditable
, nicht einString
.quelle
Verwendung
setText(String)
alsEditText.text
erfordert eineditable
bei Firstplace nicht StringWARUM ?
Schöne Erklärung von Michael unter diesem Link . Besuchen Sie diesen Link für weitere Details
Beim Generieren einer synthetischen Eigenschaft für ein Java-Getter / Setter-Paar sucht Kotlin zuerst nach einem Getter. Der Getter reicht aus, um mit einem Getter-Typ eine synthetische Eigenschaft zu erstellen. Auf der anderen Seite wird die Eigenschaft nicht erstellt, wenn nur ein Setter präsentiert.
Wenn ein Setter ins Spiel kommt, wird die Erstellung von Eigenschaften schwieriger. Der Grund ist, dass der Getter und der Setter unterschiedliche Typen haben können. Darüber hinaus können der Getter und / oder der Setter in einer Unterklasse überschrieben werden.
quelle
Hier gibt es mehrere funktionierende Antworten. Wenn Sie jedoch weiterhin das Eigenschaftsformat verwenden und Ihren Code sauber aussehen lassen möchten, können Sie eine Erweiterung schreiben:
Sie können es dann als solches verwenden:
quelle
Wenn Sie Getter
.text
aus Prinzip verwenden möchten , verwenden Sie:quelle
Oder Sie können eine Erweiterungseigenschaft verwenden:
und verwenden
.value=
statt.text=
quelle
Methoden, die den Java-Konventionen für Getter und Setter folgen (Methoden ohne Argumente mit Namen, die mit get beginnen, und Methoden mit einem Argument, deren Namen mit set beginnen), werden in Kotlin als Eigenschaften dargestellt. Beim Generieren einer Eigenschaft für ein Java-Getter / Setter-Paar sucht Kotlin zunächst nach einem Getter. Der Getter reicht aus, um den Typ der Eigenschaft aus dem Typ des Getters abzuleiten. Auf der anderen Seite wird die Eigenschaft nicht erstellt, wenn nur ein Setter vorhanden ist (da Kotlin derzeit keine Nur-Satz-Eigenschaften unterstützt).
Wenn ein Setter ins Spiel kommt, wird der Prozess der Eigenschaftsgenerierung etwas mehrdeutig. Der Grund ist, dass der Getter und der Setter unterschiedliche Typen haben können. Darüber hinaus können der Getter und / oder der Setter in einer Unterklasse überschrieben werden, was genau bei EditText in Android der Fall ist.
Im obigen Fall enthält die Android TextView-Klasse einen Getter
und ein Setter nichtig
Wenn ich eine Variable vom Typ TextView hätte, hätte mein Code gut funktioniert. Aber ich habe die EditText-Klasse verwendet, die einen überschriebenen Getter enthält
Dies bedeutet, dass Sie eine Bearbeitbarkeit für einen EditText erhalten und eine Bearbeitbarkeit für einen EditText festlegen können. Daher erstellt Kotlin vernünftigerweise einen synthetischen Eigenschaftstext vom Typ Editable. Da die String-Klasse nicht bearbeitbar ist, kann ich der text-Eigenschaft der EditText-Klasse keine String-Instanz zuweisen.
Es scheint, als hätte JetBrains vergessen, die dominierende Rolle von Getter-Methoden beim Generieren von Kotlin-Eigenschaften für Java-Getter- und Setter-Methoden anzugeben. Wie auch immer, ich habe über github eine Pull-Anfrage an die Website von Jet Brains Kotlin gesendet.
Ich habe das obige Problem auch in diesem mittleren Beitrag ausführlich beschrieben. Wie generiert Kotlin Eigenschaften aus Java-Gettern und -Setzern (undokumentiert von Jetbrains)?
quelle
Ich hatte das gleiche Problem in meinen Projekten. Ich gebe Ihnen ein Beispiel, das zeigt, wie Daten mit Kotlin in den Layouts abgerufen und festgelegt werden: Es gibt eine Schaltfläche
save_button
und zwei Textbearbeitungsfelderedit_name
undedit_password
.quelle
Einfache Lösung
Verwenden Sie einfach
edittext.setText(yourdata
) anstattedittext.text
weil der EditText bearbeitet werden kann,edittext.text
wird der für verwendetTextView
Beispielsweise:
Das ist es seine Arbeit für mich.
quelle
Verwenden Sie wie folgt:
quelle
setText (String), daher müssen Sie Ihren String auf editText setzen, also in Ihrem Fall: nametxt.setText (name)
quelle
Oder gegossen ,
TextView
aber ich glaube, dies sollte auf der Kotlin-Seite behoben werden, um den Entwicklern die Arbeit zu erleichtern!Oder mit einigen Erweiterungen:
Du kannst schreiben:
oder
Aber leider kann man einfach nicht einfach schreiben
someEditText.text = "someTextValue"
quelle
Schauen Sie sich die API von EditText an:
void setText (CharSequence text, TextView.BufferType type)
Editable getText ()
Link: https://developer.android.com/reference/android/widget/EditText.html
quelle
Versuchen Sie es mit nametxt.post: nametxt.post ({nametxt.setText ("Ihr Text")})
quelle