2016-01-11 1 views
0

У меня был бы OnFocusChangeListener Класс, который добавляет TextWatcher Слушатель EditText, который имеет фокус и удаляет его, когда нет. Я сделал это, но приложения removeListener аварии (я не уверен, о синтаксисе ... новичку здесь)добавить TextWatcher Listerner на сфокусированный взгляд и удалить его, если нет

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

Ницца! Спасибо за ваш ответ. – Torp13

+0

У меня есть еще одна проблема с этим: когда я вращаю устройство, Texwatcher больше не срабатывает ... Однако ошибок нет, все кажется ОК. – Torp13

+0

Вы должны добавить конфигурацию: изменить <активность android: name = ". TwitterActivity" android: label = "@ string/app_name" android: configChanges = "keyboardHidden | ориентация | размер | навигация" /> –

Смежные вопросы