Reputation: 2821
Hi i have 3 edittexts when some enters the values in the 1st edittext parallel the other two edit texts will be update with converted values. same when i enter the values in other two edittexts remaining edittexts will be updated , but the values are wrongly calculated since it is taking the values into consideration and updating .how to make focus on editext and consider only entered values but not the other calculated values .
edt1.addTextChangedListener(new TextWatcher() {
boolean editing = false;
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void afterTextChanged(Editable s) {
String qtyString = s.toString().trim();
if(!editing)
{
editing = true;
if(qtyString.length() > 0){
edt2.setText(String.valueOf(hexTodecimal(qtyString)));
edt3.setText(String.valueOf(hexTobinary(qtyString)));
}
else{
edt2.setText("");
edt3.setText("");
}
editing = false;
}
}
});
my edittext 2
edt2.addTextChangedListener(new TextWatcher() {
boolean editing = false;
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void afterTextChanged(Editable s) {
String qtyString = s.toString().trim();
if(!editing)
{
editing = true;
if(qtyString.length() > 0){
edt_hex_val.setText(String.valueOf(binarytohex(qtyString)));
// edt_binary_val.setText(String.valueOf(hexTobinary(qtyString)));
}
else{
edt_hex_val.setText("");
//edt_binary_val.setText("");
}
editing = false;
}
}
});
my edittext 3
edt3.addTextChangedListener(new TextWatcher() {
boolean editing = false;
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void afterTextChanged(Editable s) {
String qtyString = s.toString().trim();
if(!editing)
{
if(qtyString.length() > 0){
// edt_decimal_val.setText(String.valueOf(hexTodecimal(qtyString)));
edt_hex_val.setText(String.valueOf(binarytohex(qtyString)));
}
else{
edt_hex_val.setText("");
//edt_decimal_val.setText("");
}
editing = false;
}
}
});
}
Edit: I tried as below but the values are not updating
textWatcher=new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
qtyString = s.toString().trim();
// System.out.println("printing sting==============="+qtyString);
if (s == edt_hex_val.getEditableText()) {
edt_decimal_val.removeTextChangedListener(textWatcher);
edt_binary_val.removeTextChangedListener(textWatcher);
if(qtyString.length() > 0 ){
edt_decimal_val.setText(String.valueOf(hexTodecimal(qtyString)));
edt_binary_val.setText(String.valueOf(hexTobinary(qtyString)));
}else{
edt_decimal_val.setText("");
edt_binary_val.setText("");
}
} else if (s == edt_decimal_val.getEditableText()) {
edt_hex_val.removeTextChangedListener(textWatcher);
edt_binary_val.removeTextChangedListener(textWatcher);
if(qtyString.length() > 0){
edt_hex_val.setText(String.valueOf(hexTodecimal(qtyString)));
edt_binary_val.setText(String.valueOf(hexTobinary(qtyString)));
}else{
edt_hex_val.setText("");
edt_binary_val.setText("");
}
} else if (s == edt_binary_val.getEditableText()) {
edt_hex_val.removeTextChangedListener(textWatcher);
edt_decimal_val.removeTextChangedListener(textWatcher);
if(qtyString.length() > 0){
edt_hex_val.setText(String.valueOf(hexTodecimal(qtyString)));
edt_decimal_val.setText(String.valueOf(hexTobinary(qtyString)));
}else{
edt_hex_val.setText("");
edt_decimal_val.setText("");
}
}
}
};
Upvotes: 1
Views: 347
Reputation: 14755
boolean editing
should prevent recursive triggering of TextWatcher-events while setting the other EditText-s. However since every TextWatcher has its own instance of editing
this protection does not work. making editing
more global should solve the issue.
private EditText edt1;
private EditText edt2;
boolean editing = false; // all EditText-s use the same editing flag
edt1.addTextChangedListener(new TextWatcher() {
// boolean editing = false; // make this global
....
});
edt2.addTextChangedListener(new TextWatcher() {
// boolean editing = false; // make this global
....
});
Upvotes: 1