在焦点视图上添加TextWatcher Listerner,如果不是

时间:2016-01-11 15:41:53

标签: android textwatcher

我会有一个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;
        }

    }

提前致谢。

1 个答案:

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