I would have a OnFocusChangeListener
Class that add TextWatcher
Listener on EditText that have the focus and remove it when have not.
I have made this but removeListener
crash application (I'm not sure about the syntax... newbie here)
MyOnFocusChangeListener :
public class Listener_Water_EdText_OnClick extends Fragment_Eau implements View.OnFocusChangeListener {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (v.getId() == R.id.et_wDebit && hasFocus) {
et_wDebit.addTextChangedListener(new Listener_Water_EdText_TxtWatcher(et_wDebit));
} else {
et_wDebit.removeTextChangedListener(new Listener_Water_EdText_TxtWatcher(et_wDebit));
}
if (v.getId() == R.id.et_wPuissance && hasFocus) {
et_wPuissance.addTextChangedListener(new Listener_Water_EdText_TxtWatcher(et_wPuissance));
} else {
et_wPuissance.removeTextChangedListener(new Listener_Water_EdText_TxtWatcher(et_wPuissance));
}
}
}
and just for information, My TextWatcherListener :
public class Listener_Water_EdText_TxtWatcher extends Fragment_Eau implements TextWatcher {
private EditText et;
public Listener_Water_EdText_TxtWatcher(EditText et) {
this.et = et;
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
Log.i("afterTextChanged", s.toString());
Log.i("Wcalc.PdcMax", WCalc.getPdCMaxToString());
switch (et.getId()) {
case R.id.et_wTetaAller:
try {
WCalc.setTetaAller(Integer.valueOf(s.toString()));
} catch (Exception e) {
WCalc.setTetaAller(0);
}
if (WCalc.getDebit() > 0) {
//Mise à jour de la puissance afin de relancer le calcul avec le nouveau dTeta
WCalc.setPuissance(WCalc.getPuissance());
et_wDebit.setText(WCalc.getDebitToString());
//Affichage des résultats du calcul
setResults();
}
break;
case R.id.et_wTetaRetour:
try {
WCalc.setTetaRetour(Integer.valueOf(s.toString()));
} catch (Exception e) {
WCalc.setTetaRetour(0);
}
if (WCalc.getDebit() > 0) {
//Mise à jour de la puissance afin de relancer le calcul avec le nouveau dTeta
WCalc.setPuissance(WCalc.getPuissance());
et_wDebit.setText(WCalc.getDebitToString());
//Affichage des résultats du calcul
setResults();
}
break;
case R.id.et_wPuissance:
try {
WCalc.setPuissance(Float.valueOf(s.toString()));
} catch (Exception e) {
WCalc.setPuissance(0);
}
et_wDebit.setText(WCalc.getDebitToString());
//Affichage des résultats du calcul
if (WCalc.getPuissance() > 0) {
setResults();
} else {
setNA();
}
break;
case R.id.et_wDebit:
try {
WCalc.setDebit(Float.valueOf(s.toString()));
} catch (Exception e) {
WCalc.setDebit(0);
}
et_wPuissance.setText(WCalc.getPuissanceToString());
//Affichage des résultats du calcul
if (WCalc.getDebit() > 0) {
setResults();
} else {
setNA();
}
break;
}
}
Thanks in advance.
et_wDebit.removeTextChangedListener(new Listener_Water_EdText_TxtWatcher(et_wDebit));
This line trys to remove a TxtWatcher that hasn't be added.
public class Listener_Water_EdText_OnClick extends Fragment_Eau implements View.OnFocusChangeListener {
public Listener_Water_EdText_TxtWatcher watcher0;
public Listener_Water_EdText_TxtWatcher watcher1;
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (v.getId() == R.id.et_wDebit && hasFocus) {
watcher0 = new Listener_Water_EdText_TxtWatcher(et_wDebit);
et_wDebit.addTextChangedListener();
} else {
if(watcher0!=null){
try {
et_wDebit.removeTextChangedListener(watcher0);
}catch (Throwable e){
Log.e("test","error",e);
}
}
}
if (v.getId() == R.id.et_wPuissance && hasFocus) {
watcher1 =new Listener_Water_EdText_TxtWatcher(et_wPuissance);
et_wPuissance.addTextChangedListener(watcher1);
} else {
if(watcher1!=null){
try {
et_wPuissance.removeTextChangedListener(watcher1);
}catch (Throwable e){
Log.e("test","error",e);
}
}
}
}
}