Saya memiliki tiga EditText
widget dalam tata letak tampilan saya. Apakah ada cara menggunakan satu TextWatcher
untuk ketiganya EditTexts
?
android
textwatcher
bie
sumber
sumber
Jawaban:
Saya baru saja mengalami masalah ini. Saya menyelesaikannya dengan membuat implementasi kelas dalam
TextWatcher
yang mengambil View sebagai argumen. Kemudian, dalam implementasi metode, cukup aktifkan tampilan untuk melihat dari manaEditable
asalnyaPernyataan:
Pemakaian:
sumber
Single TextWatcher for multiple EditTexts
. Ini adalah 3 instance dari satu kelas TextWatcher. Jadi 3 TextWatchers terpisah mengontrol 3 EditTexts.Jika Anda ingin menggunakan hanya afterTextChanged bandingkan yang dapat diedit:
sumber
==
bukan.equals()
.Implementasi MultiTextWatcher
Pemakaian
sumber
TextView
perubahan itu berasal.Jika Anda ingin menggunakan perbandingan onTextChanged yang
hashCode()
disebutkan di bawah -Atau
Jika Anda ingin menggunakan perbandingan afterTextChanged yang
Editable
disebutkan di bawah -sumber
Ini akan bekerja dengan kode ini
Kemudian tambahkan ini di oncreate
sumber
Saya tahu ini masalah lama, dan ada keputusan yang tepat. Saya akan menulis sendiri, mungkin itu akan membantu seseorang.
Meniru contoh klasik di mana kami memiliki N EditText, dan kami ingin menampilkan tombol jika semua bidang terisi. Contoh ini masuk akal, terutama jika selanjutnya menggunakan validator untuk masing-masing.
Saya membuat contoh sehubungan dengan masalah ini, tetapi Anda dapat melakukan set apa pun
MultiEditText.class
Ini terlihat sangat sederhana, sekarang
CustomTextWatcher.class
Saya akan menambahkan tata letak, jadi Anda tidak membuang waktu
multi_edit_text.xml
sumber
Buat kelas Anda mewarisi dari Activity dan implementasikan TextWatcher.
Kemudian melalui keajaiban polimorfisme, Anda hanya perlu berlangganan acara.
Ini tidak akan memberi tahu Anda apa yang diubah TextEdit, namun menggunakan kombinasi jawaban ini dan Sky Kelsey Anda dapat mengatasinya dengan baik.
sumber
Kemudian:
sumber
sumber
Ini adalah solusi saya untuk kotlin. Anda cukup menggunakan persamaan referensial (===) untuk memeriksa objek yang sama dan itu berfungsi dengan sempurna.
sumber
Saya tahu pertanyaan ini sudah lama, namun saya ingin membagikan salah satu solusi saya (di Kotlin). Solusi saya adalah perbaikan dari jawaban @Shwarz Andrei, alasan saya adalah bagaimana jika Anda ingin memanipulasi lebih banyak hal / objek.
Alih-alih melewati keduanya
list of EditTexts
dana Button
sebagai params, Anda hanya akan luluslist of editText
. Kemudian di dalam kelas kustom Anda, Anda akan mengimplementasikan lambda seperti:Kemudian Anda akan mengatur atau menaikkannya di dalam
afterTextChanged
sumber
Inilah cara saya melakukannya:
Buat ArrayList dari EditTexts, dan kemudian gunakan loop for untuk menerapkan TextWatcher untuk semua EditTexts, jika Anda memiliki satu perilaku untuk semua editTexts, maka cukup terapkan di sana, jika Anda berperilaku khusus untuk beberapa editText tertentu, maka Anda dapat menggunakan if pernyataan untuk memilih dan diterapkan ke editTexts individu.
Ini kode saya:
Semoga ini membantu
sumber
onTextChanged
pada EditText. MenambahkanonFocusChange
untuk beberapa widget jauh lebih sederhana, karena ia meneruskan objek pengirim dengan pemanggilan metode. Kemudian Anda dapat memeriksa objek mana yang telah memicu panggilan tersebut dan menanganinya dari sana.