Android 在聚焦视图上添加TextWatcher Listerner,如果没有,则将其删除

Android 在聚焦视图上添加TextWatcher Listerner,如果没有,则将其删除,android,textwatcher,Android,Textwatcher,我将有一个onfocuschangesetener类,该类在EditText上添加具有焦点的TextWatcher侦听器,并在没有焦点时将其删除。 我做了这个,但是removeListener使应用程序崩溃(我不确定语法…这里是新手) MyOnFocusChangeListener: public class Listener_Water_EdText_OnClick extends Fragment_Eau implements View.OnFocusChangeListener { @

我将有一个
onfocuschangesetener
类,该类在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;
        }

    }
提前谢谢

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);
            }
        }
    }
  }
}

美好的谢谢你的回复。我还有一个问题:当我旋转设备时,Texwatcher不再开火。。。但是没有错误,一切似乎都正常。你应该在目标上添加config:change!我很快就要买一包啤酒了。。。谢谢