Autore Topic: AfterTextChanged() inserendo il testo tra due parole  (Letto 456 volte)

Offline Vincenzoz

  • Utente junior
  • **
  • Post: 122
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Moto G
  • Play Store ID:
    Vincenzo Cimino
  • Sistema operativo:
    Windows 7
AfterTextChanged() inserendo il testo tra due parole
« il: 13 Agosto 2014, 15:19:52 CEST »
0
Salve io avrei bisogno di creare un edittext dove, ogni volta che viene inserito un qualsiasi testo, subito dopo quest'ultimo venga inserito tra le parole "Da " e " Persone, ad esempio l'utente inserisce 32 e compaia: "Da 32 Persone".

Ora ho provato a fare così con un TextWatcher:
Codice (Java): [Seleziona]
textIn.addTextChangedListener(new TextWatcher() {
        String temp = "";
                       
        @Override
        public void afterTextChanged(Editable arg0) {
                        textIn.removeTextChangedListener(this);
                        textIn.setText("Da "+temp+" Persone");
                        textIn.addTextChangedListener(this);
        }
        @Override
        public void beforeTextChanged(CharSequence arg0, int arg1,int arg2, int arg3) {
                        textIn.removeTextChangedListener(this);
                        textIn.setText(temp);
                        textIn.addTextChangedListener(this);
        }
        @Override
        public void onTextChanged(CharSequence arg0, int arg1, int arg2,int arg3) {
                       temp = textIn.getText().toString();
        }
                               
});

Ma ogni volta che inserisco un testo nell'edittext, compare sempre la scritta: "Da Persone", come posso risolvere ?
Grazie mille in anticipo  :D
Vincenzo Cimino @ Google Play Store


Offline Paso

  • Utente junior
  • **
  • Post: 98
  • Respect: +17
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy sIII mini
  • Sistema operativo:
    Linux Mint 17 64-bit
Re:AfterTextChanged() inserendo il testo tra due parole
« Risposta #1 il: 13 Agosto 2014, 15:59:33 CEST »
0
Prova a mettere temp = textIn.getText().toString(); anche nel afterTextChanged, se no metti dei Log e vedi che dicono così sei sicuro che afterTextChanged venga chiamato

Offline Vincenzoz

  • Utente junior
  • **
  • Post: 122
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Moto G
  • Play Store ID:
    Vincenzo Cimino
  • Sistema operativo:
    Windows 7
Re:AfterTextChanged() inserendo il testo tra due parole
« Risposta #2 il: 14 Agosto 2014, 14:53:25 CEST »
0
Non va comunque il problema, è che ad ogni carattere che scrivo si aggiunge "Da Persone" ad esempio se scrivo 66, compare "Da 6 Persone Da 6 persone". A me serve che dopo aver scritto tutto quanto, compaia "Da x Persone"
Vincenzo Cimino @ Google Play Store


Offline Paso

  • Utente junior
  • **
  • Post: 98
  • Respect: +17
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy sIII mini
  • Sistema operativo:
    Linux Mint 17 64-bit
Re:AfterTextChanged() inserendo il testo tra due parole
« Risposta #3 il: 14 Agosto 2014, 16:25:59 CEST »
0
Se ti serve che il tutto venga inserito alla fine perchè usare onTextChanged? Se lo usi ogni volta che scrivi una cifra ti scrive l'intera frase...

Offline Vincenzoz

  • Utente junior
  • **
  • Post: 122
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Moto G
  • Play Store ID:
    Vincenzo Cimino
  • Sistema operativo:
    Windows 7
Re:AfterTextChanged() inserendo il testo tra due parole
« Risposta #4 il: 15 Agosto 2014, 22:07:10 CEST »
0
Motivo per cui, ho messo la domanda. Come faccio visto che con l'onTextChanged non si puo' fare?
Vincenzo Cimino @ Google Play Store


Offline Paso

  • Utente junior
  • **
  • Post: 98
  • Respect: +17
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy sIII mini
  • Sistema operativo:
    Linux Mint 17 64-bit
Re:AfterTextChanged() inserendo il testo tra due parole
« Risposta #5 il: 16 Agosto 2014, 13:21:12 CEST »
0
Sposta temp = textIn.getText().toString(); nel afterTextChanged e metti un Log.d("temp",temp); subito dopo, poi se non funziona fammi sapere che dice il Log!  ;-)

Offline Vincenzoz

  • Utente junior
  • **
  • Post: 122
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Moto G
  • Play Store ID:
    Vincenzo Cimino
  • Sistema operativo:
    Windows 7
Re:AfterTextChanged() inserendo il testo tra due parole
« Risposta #6 il: 17 Agosto 2014, 20:32:34 CEST »
0
Se lo faccio nell'afterTextChanged(), ottengo sempre la scritta "Da Persone", ogni cosa che scrivo non viene inserita nell'edittext e il log non viene stampato.  :-o

Post unito: [time]17 Agosto 2014, 22:49:28 CEST[/time]
Ok infine ho risolto in un modo totalmente diverso, così:

Codice (Java): [Seleziona]
textIn.setOnEditorActionListener(new OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView arg0, int arg1, KeyEvent arg2) {
                textIn.setText("Da "+textIn.getText().toString()+" Persone");
                return false;
        }
                       
 });
               
textIn.setOnTouchListener(new OnTouchListener(){
        @Override
        public boolean onTouch(View v, MotionEvent event) {
                if(textIn.getText().toString().length() > 0){
                        if(textIn.getText().toString().charAt(0) == 'D'){
                                StringBuffer temp = new StringBuffer(textIn.getText().toString());
                                temp.delete(0, 3);
                                temp.deleteCharAt(temp.length()-1);
                                temp.deleteCharAt(temp.length()-1);
                                temp.deleteCharAt(temp.length()-1);
                                temp.deleteCharAt(temp.length()-1);
                                temp.deleteCharAt(temp.length()-1);
                                temp.deleteCharAt(temp.length()-1);
                                temp.deleteCharAt(temp.length()-1);
                                temp.deleteCharAt(temp.length()-1);
                                textIn.setText(temp);
                                textIn.setSelection(temp.length());
                        }
                }              
                return false;
        }
 });

Con l'OnEditorChangeListener, dopo che il testo viene modificato, aggiunge "Da" e "Persone. Mentre con l'onTouchListener, ogni volta che si sta per scrivere qualcosa nell'editText le stringhe "Da" e "Persone" vengono eliminate, il testo viene cambiato e il selettore posizionato all'ultima posizione.

Grazie mille comunque per l'aiuto  :D
« Ultima modifica: 17 Agosto 2014, 22:51:25 CEST da Vincenzoz, Reason: Merged DoublePost »
Vincenzo Cimino @ Google Play Store