Saya mencoba untuk menyetel teks dalam EditText tetapi dikatakan:
Type mismatch.
Required: Editable
Found: String
Kode saya adalah sebagai berikut:
String name = "Paramjeet"
val nametxt = findViewById (R.id.nametxt) as EditText
nametxt.text = name
Jangan katakan untuk menggunakan setText
karena saya menggunakan kotlin, bukan Java.
android
kotlin
android-edittext
Paramjeet Singh
sumber
sumber
nexttxt.setText(name)
tanpa menemukan atau mentransmisi.Jawaban:
Gunakan
setText(String)
, karenaeditText.text
mengharapkanEditable
, bukanString
.sumber
Gunakan
setText(String)
sebagai yang pertama kaliEditText.text
diperlukan,editable
bukan StringMENGAPA?
Penjelasan bagus oleh Michael diberikan di bawah tautan ini . Kunjungi tautan ini untuk detail lebih lanjut
Saat membuat properti sintetik untuk pasangan pengambil / penyetel Java, pertama-tama Kotlin mencari pengambil. Getter cukup untuk membuat properti sintetik dengan tipe getter. Di sisi lain, properti tidak akan dibuat jika hanya ada penyetel.
Ketika seorang setter ikut bermain, pembuatan properti menjadi lebih sulit. Alasannya adalah pengambil dan penyetel mungkin memiliki tipe yang berbeda. Selain itu, pengambil dan / atau penyetel dapat diganti dalam subkelas.
sumber
Ada beberapa jawaban yang berfungsi di sini, tetapi jika Anda masih ingin menggunakan format properti dan kode Anda terlihat bersih, Anda dapat menulis ekstensi:
fun String.toEditable(): Editable = Editable.Factory.getInstance().newEditable(this)
Anda kemudian dapat menggunakannya seperti itu:
sumber
Jika Anda ingin menggunakan getter
.text
from principle, gunakan:sumber
Atau Anda dapat menggunakan properti ekstensi:
var EditText.value get() = this.text.toString() set(value) { this.setText(value) }
dan gunakan
.value=
sebagai pengganti.text=
sumber
Metode yang mengikuti konvensi Java untuk getter dan setter (metode tanpa argumen dengan nama yang dimulai dengan get dan metode argumen tunggal dengan nama yang dimulai dengan set) direpresentasikan sebagai properti di Kotlin. Tapi, Saat membuat properti untuk pasangan pengambil / penyetel Java, Kotlin pada awalnya mencari pengambil. Getter cukup untuk menyimpulkan tipe properti dari tipe getter. Di sisi lain, properti tidak akan dibuat jika hanya ada setter (karena Kotlin tidak mendukung properti set-only saat ini).
Ketika seorang penyetel ikut bermain, proses pembuatan properti menjadi agak ambigu. Alasannya adalah pengambil dan penyetel mungkin memiliki tipe yang berbeda. Selain itu, pengambil dan / atau penyetel dapat diganti dalam subkelas, yang merupakan kasus EditText di android.
Dalam kasus di atas, kelas Android TextView berisi getter
dan kekosongan penyetel
Jika saya memiliki variabel tipe TextView, kode saya akan berfungsi dengan baik. Tapi saya menggunakan kelas EditText yang berisi getter yang diganti
yang berarti Anda bisa mendapatkan Editable untuk EditText dan menyetel Editable ke EditText. Oleh karena itu, Kotlin membuat teks properti sintetis berjenis Editable. Karena kelas String tidak dapat diedit, itulah mengapa saya tidak dapat menetapkan instance String ke properti teks kelas EditText.
Sepertinya JetBrains lupa untuk menentukan peran dominan metode pengambil saat membuat properti kotlin untuk metode pengambil dan penyetel Java. Bagaimanapun, saya telah mengirimkan permintaan tarik ke situs web Jet brains kotlin melalui github.
Saya telah merinci masalah di atas dalam posting media ini juga Bagaimana Kotlin Menghasilkan Properti dari Java Getters and Setters (Tidak didokumentasikan oleh Jetbrains)
sumber
Solusi Sederhana
Cukup gunakan
edittext.setText(yourdata
) daripadaedittext.text
karena EditText dapat diedit,edittext.text
tetapi digunakan untukTextView
Sebagai contoh:
var name:String = "Muzammil" edittext.setText(name)
Itu pekerjaannya untuk saya.
sumber
Saya memiliki masalah yang sama dalam proyek saya, saya memberi Anda contoh yang menunjukkan cara mengambil dan mengatur data dalam tata letak menggunakan Kotlin: ada satu tombol
save_button
dan dua bidang edit teksedit_name
danedit_password
.//when cliquing on the button 'save_button' save_button.setOnClickListener { // geting the value from the two fields by using .text.toString() val email = edit_name.text.toString() val password = edit_password.text.toString() // showing the result on the systeme's log Log.d("Main activity","your email is " + email ) Log.d("Main activity", "your password is $password" ) // Then shows these values into the text view palete using .setText() text_view.setText("$email " + "$password") }
sumber
Gunakan seperti ini:
sumber
Atau cast ke
TextView
tapi saya yakin ini harus diperbaiki di sisi kotlin untuk kenyamanan pengembang!(someEditText as TextView).text = "someTextValue"
Atau dengan beberapa ekstensi:
val EditText.asTextView: TextView get() = this as TextView var EditText.value: CharSequence? get() = asTextView.text set(value) { asTextView.text = value }
Kamu bisa menulis:
someEditText.asTextView.text = "someTextValue"
atau
someEditText.value = "someTextValue"
Tapi sayangnya Anda tidak bisa menulis sederhana
someEditText.text = "someTextValue"
sumber
setText (String), jadi Anda harus setText string Anda ke editText, jadi dalam kasus Anda adalah: nametxt.setText (name)
sumber
Lihat API EditText:
void setText (CharSequence text, TextView.BufferType type)
Editable getText ()
Tautan: https://developer.android.com/reference/android/widget/EditText.html
sumber
Coba gunakan nametxt.post: nametxt.post ({nametxt.setText ("teks Anda")})
sumber