Autore Topic: EditText e TextWatcher  (Letto 1206 volte)

Offline brunano21

  • Nuovo arrivato
  • *
  • Post: 3
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S2 i9100
  • Sistema operativo:
    Windows 7
EditText e TextWatcher
« il: 30 Maggio 2013, 14:56:20 CEST »
0
Salve ragazzi,
volevo fare una domanda riguardante un problema che ho riscontrato nell'utilizzo di editText e TextWatcher. In pratica, quello che sto realizzato è un'app per il cambio della valuta. La mia idea originale era la seguente: dopo aver selezionato la valuta di partenza e quella di arrivo, volevo fare che appena l'utente inizia a digitare il numero nel editText1, tramite il TextWatcher effettuo la conversione e la riporto nell'editText2. Ovviamente, volevo fare anche il contrario, ovvero se scrivo nella editText2, la conversione deve essere riportata nell'editText1.
Vi riporto il pezzettino di codice che ho fatto per realizzare il textWatcher:
Codice (Java): [Seleziona]
EditText edit1 = (EditText) findViewById(R.id.editText1);
edit1.addTextChangedListener(new TextWatcher() {
   public void onTextChanged(CharSequence s, int start, int before, int count){}
   public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
   public void afterTextChanged(Editable s) {
                Double conv = Double.valueOf(0);
                conv = (Double.valueOf(s.toString()) * Double.valueOf(map.get(spinner2.getSelectedItem().toString())))/ Double.valueOf(map.get(spinner1.getSelectedItem().toString()));
                edit2.setText(conv.toString());
  }
});

Anche l'edit2 ha un codice simile dove cambia solo la funzione di conversione.
Il mio problema consiste in questo: quando modifico l'edit1, scatta il textWatcher, che va a modificare il testo dell'edit2. Ma essendo attivato un listener (lo stesso in pratica) anche nell'edit2, scatta anche quello, facendo andare l'applicazione in loop, che significa far crashare l'app.
Vi volevo chiedere se esiste qualche metodo per sapere chi ha generato l'evento e in caso andare a filtrare in base all'id oppure se esiste qualche altro meccanismo che potrei utilizzare.
Mi scuso anticipatamente se sono stato troppo prolisso nella descrizione, ma spero di essermi fatto capire.

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:EditText e TextWatcher
« Risposta #1 il: 30 Maggio 2013, 14:59:51 CEST »
0
Controlla se l'EditText ha il focus, ci dovrebbe essere la funzione hasFocus().
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline brunano21

  • Nuovo arrivato
  • *
  • Post: 3
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S2 i9100
  • Sistema operativo:
    Windows 7
Re:EditText e TextWatcher
« Risposta #2 il: 30 Maggio 2013, 15:02:43 CEST »
0
Controlla se l'EditText ha il focus, ci dovrebbe essere la funzione hasFocus().
Intanto grazie mille per la celere risposta. Quale dei due edit dovrebbe avere il focus? e poi, perchè? cioè cosa è che succede?


EDIT:
Grazie, ho risolto come tu facendo un semplice if prima della funzione di conversione per verificare se l'edit hanno il focus o no. Grazie ancora, non ci avevo pensato!  ;-)
« Ultima modifica: 30 Maggio 2013, 15:10:21 CEST da brunano21, Reason: Topic Risolto »

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:EditText e TextWatcher
« Risposta #3 il: 30 Maggio 2013, 17:04:59 CEST »
0
Grazie, ho risolto come tu facendo un semplice if prima della funzione di conversione per verificare se l'edit hanno il focus o no. Grazie ancora, non ci avevo pensato!  ;-)

Se hai due minuti, posta la soluzione così può essere utile ad un futuro lettore. E poi ti metterei anche un +1.  :D
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline brunano21

  • Nuovo arrivato
  • *
  • Post: 3
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S2 i9100
  • Sistema operativo:
    Windows 7
Re:EditText e TextWatcher
« Risposta #4 il: 30 Maggio 2013, 17:12:33 CEST »
+1
Eccola:
Codice (Java): [Seleziona]
EditText edit1 = (EditText) findViewById(R.id.editText1);
EditText edit2 = (EditText) findViewById(R.id.editText2);
edit1.addTextChangedListener(new TextWatcher() {
   public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
   public void onTextChanged(CharSequence s, int start, int before, int count){}
   public void afterTextChanged(Editable s) {
      if(edit1.hasFocus()){
         // fai qualcosa del tipo
         edit2.setText(conv.toString());
      }
   }
});

edit2.addTextChangedListener(new TextWatcher() {
   public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
   public void onTextChanged(CharSequence s, int start, int before, int count){}
   public void afterTextChanged(Editable s) {
      if(edit2.hasFocus()){
         // fai qualcosa tipo
         edit1.setText(conv.toString());
      }
   }
});
In questo modo, se modifico qualcosa nel editText edit1, scatterà il suo listener che nel mio caso modificava l'editText edit2, senza che quest'ultimo però faccia scattare il suo listener, proprio perchè non detiene il focus. Grazie Ancora!