Reputation: 251
I have two edit text namely mobile number and password in which I am adding TextWatcher and But I want single TextWatcher in multiple edit text .How do I do that
TextWatcher mMobileWatcher = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
checkFieldsForEmpty();
}
@Override
public void afterTextChanged(Editable s) {
isValidMobile();
}
};
TextWatcher m_EmailWatcher = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
checkFieldsForEmpty();
}
@Override
public void afterTextChanged(Editable s) {
m_EmailId = m_Inputemail.getText().toString().trim();
if (!isValidEmail(m_EmailId)) {
m_Inputemail.setError("Please enter valid Email Id");
}
}
};
m_InputMobile = (EditText) findViewById(R.id.input_mobile);
m_InputMobile.addTextChangedListener(mMobileWatcher);
m_Inputemail = (EditText) findViewById(R.id.input_emailId);
m_Inputemail.addTextChangedListener(m_EmailWatcher);
Upvotes: 1
Views: 1766
Reputation: 4182
Oncreate
et1=(EditText)findViewById(R.id.et1);
et2=(EditText)findViewById(R.id.et2);
et3=(EditText)findViewById(R.id.et3);
et4=(EditText)findViewById(R.id.et4);
et1.addTextChangedListener(new MyTextWatcher(et1));
et2.addTextChangedListener(new MyTextWatcher(et1));
et3.addTextChangedListener(new MyTextWatcher(et1));
et4.addTextChangedListener(new MyTextWatcher(et1));
MyTextWatcher take in your class
private class MyTextWatcher implements TextWatcher {
private View view;
private MyTextWatcher(View view) {
this.view = view;
}
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
public void afterTextChanged(Editable editable) {
switch (view.getId()) {
case R.id.et1: // et1 is id of edittext et1;
// put You Code
break;
case R.id.et2:
break;
case R.id.et3:
break;
case R.id.et4:
break;
}
}
}
Upvotes: 0
Reputation: 638
You can do it like this :
private final TextWatcher mTextWatcher = new TextWatcher() {
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
public void afterTextChanged(Editable s) {
if (s == [youredittext].getEditableText()) {
}
if (s == [youranotheredittext].getEditableText()) {
}
}
};
And in onCreate()
[youredittext].addTextChangedListener(mTextWatcher);
[youranotheredittext].addTextChangedListener(mTextWatcher);
Upvotes: 1
Reputation: 13555
Try this way to do that
private class CustomTextWatcher implements TextWatcher{
private View view;
private CustomTextWatcher (View view) {
this.view = view;
}
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {}
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {}
public void afterTextChanged(Editable editable) {
String text = editable.toString();
switch(view.getId()){
case R.id.edtname:
model.setName(text);
break;
case R.id.edtemail:
model.setEmail(text);
break;
case R.id.edtphone:
model.setPhone(text);
break;
}
}
}
to use in oncreate
edtname = (EditText) findViewById(R.id.edtname);
edtname.setText(model.getName());
edtname.addTextChangedListener(new CustomTextWatcher (edtname));
edtemail = (EditText) findViewById(R.id.edtemail);
edtemail .setText(model.getEmail());
edtemail .addTextChangedListener(new CustomTextWatcher (edtemail));
edtphone = (EditText) findViewById(R.id.edtphone);
edtphone .setText(model.getPhone());
edtphone .addTextChangedListener(new CustomTextWatcher (edtphone ));
Upvotes: 0