我会有一个OnFocusChangeListener
类,在EditText上添加TextWatcher
侦听器,有焦点并在没有时将其删除。
我已经做了这个removeListener
崩溃应用程序(我不确定语法......新手在这里)
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));
}
}
}
仅供参考,我的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;
}
}
提前致谢。
答案 0 :(得分:0)
et_wDebit.removeTextChangedListener(new Listener_Water_EdText_TxtWatcher(et_wDebit));
此行尝试删除尚未添加的TxtWatcher。
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);
}
}
}
}
}