Autore Topic: Controllo su una edittext  (Letto 2692 volte)

Offline alex93

  • Utente junior
  • **
  • Post: 56
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy s2
  • Sistema operativo:
    Windows 8
Controllo su una edittext
« il: 25 Maggio 2012, 15:08:45 CEST »
0
Ragazzi ho un problema con le editText!! Vorrei sapere come posso controllare che l'utente inserisca solo lettere e basta(quindi spazi,numeri e caratteri speciali nn devono esserci). Io ho provato questo codice, ma non funziona!!Qualcuno saprebbe darmi una mano??

 final EditText edit_nome = (EditText)findViewById(R.id.edit_nome);
            for(int i = 0;i<edit_nome.length();i++)
            {
            char c = edit_nome.toString().charAt(i);
            if(!('a' < c < 'z' &&  'a' < c < 'z'))
            {
               
           
            }
« Ultima modifica: 25 Maggio 2012, 15:10:41 CEST da alex93 »

Offline emaborsa

  • Utente normale
  • ***
  • Post: 274
  • Java Developer
  • Respect: +33
    • Google+
    • emaborsa
    • Mostra profilo
    • www.emaborsa.com
  • Dispositivo Android:
    Samsung Galaxy S2
  • Sistema operativo:
    Linux 10 - Win8.1 - Android 4.1.2
Re:Controllo su una edittext
« Risposta #1 il: 25 Maggio 2012, 16:34:46 CEST »
0
Potresti usare un TextWatcher in fase di inserimento così hai il controlla al volo.

Esempio che ho usato io
« Ultima modifica: 25 Maggio 2012, 16:36:27 CEST da emaborsa »

Offline alex93

  • Utente junior
  • **
  • Post: 56
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy s2
  • Sistema operativo:
    Windows 8
Re:Controllo su una edittext
« Risposta #2 il: 25 Maggio 2012, 16:49:28 CEST »
0
Non so cosa sia, è solo 3 settimane che uso android e non conosco questo comando!!! mi potresti spiegare emglio??

Offline emaborsa

  • Utente normale
  • ***
  • Post: 274
  • Java Developer
  • Respect: +33
    • Google+
    • emaborsa
    • Mostra profilo
    • www.emaborsa.com
  • Dispositivo Android:
    Samsung Galaxy S2
  • Sistema operativo:
    Linux 10 - Win8.1 - Android 4.1.2
Re:Controllo su una edittext
« Risposta #3 il: 25 Maggio 2012, 17:09:28 CEST »
0
Allora, come da esempio crei una class intenra alla tua activity:

Codice (Java): [Seleziona]
private class CustomTextWatcher implements TextWatcher {
    private EditText mEditText;

    public CustomTextWatcher(EditText e) {
        mEditText = e;
    }

    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) {
    }
}

i 3 metodi che vedi sono obbligatori, dovuti all'interfaccia implementata. A te interessa solo il afterTextChanged(). Lasciamolo così intanto.
Poi nel oncreate() della tua activity, richiami il EditText in questione e fai:

Codice (Java): [Seleziona]
EditText e = new EditText(this);
    e.addTextChangedListener(new CustomTextWatcher(e));

Così facendo, ogni volta che viene modificata la EditText, vengono chiamati i tre metodi elencati sopra.
Ora torniamo nel afterTextChanged(), il quale viene richiamato quando viene rilevata una modifica nel testo. Qui fai tutto quello che vuoi, fai i controlli della stringa.

Offline alex93

  • Utente junior
  • **
  • Post: 56
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy s2
  • Sistema operativo:
    Windows 8
Re:Controllo su una edittext
« Risposta #4 il: 25 Maggio 2012, 17:30:06 CEST »
0
grz mille, ultima domanda secondo te questo controllo va bene???
for(int i = 0;i<control.length();i++)
        {
        char c = control.getText().charAt(i);
        if(!((c >'a' &  c < 'z') |  (c < 'A' & c < 'Z') | (c == 32)))
{
Perche nn sono sicuro che funzioni alla perfezione!! sai per caso se ne esistono di migliori??

Offline emaborsa

  • Utente normale
  • ***
  • Post: 274
  • Java Developer
  • Respect: +33
    • Google+
    • emaborsa
    • Mostra profilo
    • www.emaborsa.com
  • Dispositivo Android:
    Samsung Galaxy S2
  • Sistema operativo:
    Linux 10 - Win8.1 - Android 4.1.2
Re:Controllo su una edittext
« Risposta #5 il: 25 Maggio 2012, 17:31:22 CEST »
0
grz mille, ultima domanda secondo te questo controllo va bene???
for(int i = 0;i<control.length();i++)
        {
        char c = control.getText().charAt(i);
        if(!((c >'a' &  c < 'z') |  (c < 'A' & c < 'Z') | (c == 32)))
{
Perche nn sono sicuro che funzioni alla perfezione!! sai per caso se ne esistono di migliori??

Più che altro non serve. Inizialmente la edittext è vuota. Il codice viene chiamato ogni volta che cambia, cioè ad ogni kettera. Basta che fai un test sull'ultima lettera, se è tra quelle che non ti piace, la elimini.

Offline alex93

  • Utente junior
  • **
  • Post: 56
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy s2
  • Sistema operativo:
    Windows 8
Re:Controllo su una edittext
« Risposta #6 il: 25 Maggio 2012, 17:35:51 CEST »
0
Il fatto che il mio porgramma è un anagrafe, e devo controllare 13 editText (cognome,nome,citta, ecc) quindi nn posso controllare solo l'ultima lettere ma tutta la parola!! quindi devo controllare carattere x carattere nn solo l'ultimo!!

Offline alex93

  • Utente junior
  • **
  • Post: 56
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy s2
  • Sistema operativo:
    Windows 8
Re:Controllo su una edittext
« Risposta #7 il: 25 Maggio 2012, 17:42:22 CEST »
0
Inoltre nn sono molto bravo nei controlli!! e su internet non trovo nessun esempio di controlli su editText.A me servirebbe un controllo che appena trova un carattere indisiderato invia un alert Dialogs con il messaggio di errore, ma su internet non esiste niente di niente.Conosci qualche codice per fare questo???

Offline pivoide

  • Utente junior
  • **
  • Post: 133
  • Respect: +19
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy tab 10.1
  • Play Store ID:
    codicerosso
  • Sistema operativo:
    Ubuntu 11.04
Re:Controllo su una edittext
« Risposta #8 il: 25 Maggio 2012, 17:59:58 CEST »
0
Prova a dare un'occhiata al metodo setInputType( int type) di EditTex che accetta una costante di tipo android.text.InputType che ha una lunga lista di modelli. Potrebbe essere ciò che ti serve
Odio l'inglese e per un informatico non è il massimo

Offline alex93

  • Utente junior
  • **
  • Post: 56
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy s2
  • Sistema operativo:
    Windows 8
Re:Controllo su una edittext
« Risposta #9 il: 25 Maggio 2012, 18:23:35 CEST »
0
non esiste un controllo solo per lettere, devo farmi io il codice ma non ci riesco!!!

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Controllo su una edittext
« Risposta #10 il: 25 Maggio 2012, 18:47:35 CEST »
0
Dovresti utilizzare un InputFilter, dai un occhio qui per un esempio:

http://stackoverflow.com/a/4401227/321354

Offline alex93

  • Utente junior
  • **
  • Post: 56
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy s2
  • Sistema operativo:
    Windows 8
Re:Controllo su una edittext
« Risposta #11 il: 25 Maggio 2012, 19:22:07 CEST »
0
ottimo grazie mille credo sia proprio quello che cercavo

Offline alex93

  • Utente junior
  • **
  • Post: 56
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy s2
  • Sistema operativo:
    Windows 8
Re:Controllo su una edittext
« Risposta #12 il: 25 Maggio 2012, 19:23:29 CEST »
0
pero a questo metodo filter come gli passo le editText che deve controllare??Io ho 13 editText  in cui posso inserire solo lettere, mi potresti aiutare ti faccio vedere un pezzo di programma!!!

Codice (Java): [Seleziona]
package com.anag1;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
public class Anagrafe1Activity extends Activity implements OnClickListener {
    /** Called when the activity is first created. */
        int cont=0;
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        final Button button = (Button) findViewById(R.id.form_button);
        button.setOnClickListener(this);
        final Button button1 = (Button) findViewById(R.id.form_button1);
        button1.setOnClickListener(this);
       
    }
        public int controlla(EditText control){
               
        for(int i = 0;i<control.length();i++)
        {
        char c = control.getText().charAt(i);
        if(c >'a' &  c < 'z' |  c < 'A' & c < 'Z' | c == 32)
        {
                cont = 1;
        }
        }
                return cont;
               
    }
    public void onClick(View v) {
        final EditText edit_nome = (EditText)findViewById(R.id.edit_nome);
        final EditText edit_cognome = (EditText)findViewById(R.id.edit_cognome);
        final EditText edit_datN = (EditText)findViewById(R.id.edit_datN);
        final EditText edit_luogo = (EditText)findViewById(R.id.edit_luogo);
        final EditText edit_prov = (EditText)findViewById(R.id.edit_prov);
        final EditText edit_nazio = (EditText)findViewById(R.id.edit_nazio);
        final EditText edit_ind = (EditText)findViewById(R.id.edit_ind);
        final EditText edit_citt = (EditText)findViewById(R.id.edit_citt);
        final EditText edit_cap = (EditText)findViewById(R.id.edit_cap);
        final EditText edit_prov1 = (EditText)findViewById(R.id.edit_prov1);
        final EditText edit_paese = (EditText)findViewById(R.id.edit_paese);
        final EditText edit_fax = (EditText)findViewById(R.id.edit_fax);
        final EditText edit_tel = (EditText)findViewById(R.id.edit_tel);
        final EditText edit_codF = (EditText)findViewById(R.id.edit_codF);
       
        switch ( v.getId() ) {
            case  R.id.form_button:
                int conta = controlla(edit_nome);
                if(conta == 1)
                {
                        AlertDialog.Builder miaAlert = new AlertDialog.Builder(this);
                        miaAlert.setMessage("Hai inserito caratteri non corretti nei campi");
                        miaAlert.setTitle("Attenzione!!!!");

                        miaAlert.setCancelable(false);
                        miaAlert.setPositiveButton("Continua", new DialogInterface.OnClickListener() {
                          public void onClick(DialogInterface dialog, int id) {
                           
                          }
                        });
                        AlertDialog alert = miaAlert.create();
                        alert.show();
                }
                else if(edit_nome.getText().toString().isEmpty() | edit_cognome.getText().toString().isEmpty() | edit_datN.getText().toString().isEmpty() | edit_luogo.getText().toString().isEmpty() | edit_prov.getText().toString().isEmpty() | edit_nazio.getText().toString().isEmpty() | edit_ind.getText().toString().isEmpty() | edit_citt.getText().toString().isEmpty()| edit_cap.getText().toString().isEmpty() | edit_prov1.getText().toString().isEmpty() | edit_paese.getText().toString().isEmpty() | edit_fax.getText().toString().isEmpty() | edit_tel.getText().toString().isEmpty() | edit_codF.getText().toString().isEmpty() )
                {
                       
                        AlertDialog.Builder miaAlert = new AlertDialog.Builder(this);
                        miaAlert.setMessage("Non puoi lasciare i campi vuoti!");
                        miaAlert.setTitle("Attenzione!!!!");

                        miaAlert.setCancelable(false);
                        miaAlert.setPositiveButton("Continua", new DialogInterface.OnClickListener() {
                          public void onClick(DialogInterface dialog, int id) {
                           
                          }
                        });
                        AlertDialog alert = miaAlert.create();
                        alert.show();
                }
                else
                {
            Bundle bundle = new Bundle();
            bundle.putString("nome", edit_nome.getText().toString());
            bundle.putString("cognome", edit_cognome.getText().toString());
            bundle.putString("datN", edit_datN.getText().toString());
            bundle.putString("luogo", edit_luogo.getText().toString());
            bundle.putString("prov", edit_prov.getText().toString());
            bundle.putString("nazio", edit_nazio.getText().toString());
            bundle.putString("ind", edit_ind.getText().toString());
            bundle.putString("citt", edit_citt.getText().toString());
            bundle.putString("cap", edit_cap.getText().toString());
            bundle.putString("prov1", edit_prov1.getText().toString());
            bundle.putString("paese", edit_paese.getText().toString());
            bundle.putString("fax", edit_fax.getText().toString());
            bundle.putString("tel", edit_tel.getText().toString());
            bundle.putString("codF", edit_codF.getText().toString());
            Intent form_intent = new Intent(getApplicationContext(), Form.class);
            form_intent.putExtras(bundle);
            startActivity(form_intent);
                }
       
            break;
       
       
     
            case R.id.form_button1:
               
                edit_nome.setText("");
                 edit_cognome.setText("");
                 edit_datN.setText("");
                 edit_luogo.setText("");
                 edit_prov.setText("");
                 edit_nazio.setText("");
                 edit_ind.setText("");
                 edit_citt.setText("");
                 edit_cap.setText("");
                 edit_prov1.setText("");
                 edit_fax.setText("");
                 edit_tel.setText("");
                 edit_codF.setText("");
                 edit_paese.setText("");
                 break;
           
           
        }
        }
}    
« Ultima modifica: 25 Maggio 2012, 19:56:31 CEST da Ricky` »

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Controllo su una edittext
« Risposta #13 il: 25 Maggio 2012, 20:07:29 CEST »
0
La soluzione migliore è estendere la classe EditText impostando direttamente il filtro all'interno e utilizzare questo nuovo EditText all'interno del layout.

Offline alex93

  • Utente junior
  • **
  • Post: 56
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy s2
  • Sistema operativo:
    Windows 8
Re:Controllo su una edittext
« Risposta #14 il: 25 Maggio 2012, 21:38:41 CEST »
0
come ho detto prima e poco che uso java e android non so se riesco a farlo