2016-01-11 31 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

你應該添加config:change

相關問題