As Android Developer, we have used TextWatcher callback to listen any of the changes in the EditText.
Something like this :
editText.addTextChangedListener(object : TextWatcher {
override fun afterTextChanged(p0: Editable?) {
}
override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
}
override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
}
})
Data Binding Implementation
In Your xml Layout use OnTextChanged property
android:onTextChanged="@{model.onPasswordTextChanged}"
And call the view model user defined method to handle text changes in EditText. Full Snippet is below :
<EditText
android:id="@+id/password_et"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/username_et"
android:layout_marginTop="10dp"
android:hint="Password"
android:onTextChanged="@{model.onPasswordTextChanged}"
android:inputType="textPassword" />
ViewModel User defined method can be like this (implement as per your implementation):
fun onPasswordTextChanged(s: CharSequence,start: Int,before : Int,
count :Int){
//TODO write your implementation here ...
}
Now no more of TextWatcher callback in your View(Activity/Fragment), Instead use data binding to avoid boilerplate code.
Use MVVM, implement user defined method’s in ViewModel to handle OnTextChanged in xml.
Hope to see more of this implementation in future :-)
Cheers!!