2015-12-20 1 views
-1

que je dois faire pour gestionnaire EditText dans mon application et cette EditText accepte an entre 1980 à 2015.InputFilter ou TextWatcher pour EditText qui gèrent un grand nombre entier (comme l'an ..)

J'ai trouvé une très bonne solution pour EditText pour jour (s) et mois (s) dans ce link.

Mais malheureusement, cela ne fonctionne pas pour les grands nombres comme les années!

J'ai donc écrit un morceau de code.

etDateYear = (EditText) findViewById(R.id.year_date_xml); 
etDateYear.addTextChangedListener(YearWatcher); 
private final TextWatcher YearWatcher = new TextWatcher() { 

    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void afterTextChanged(Editable s) { 
     // TODO Auto-generated method stub 
     try{ 
      if(s.length()>=4){ 
       int year = Integer.parseInt(etDateYear.getText().toString()); 
       if(!(year < 2016 && year > 1979)) { 
        etDateYear.setText(""); 
       } 
      } 
     } catch (NumberFormatException nfe) { 
      //nfe 
     } 

    } 

}; 

Celui-ci ne fonctionne pas non plus car un seul chiffre est inférieur à 1980, donc il passe "". (Je pense que c'est la cause).

Alors, n'importe qui pourrait vous aider? Merci beaucoup ..

+0

1) Solution simple remplacer "ou" par "et" dans l'expression conditionnelle. 2) Remplacer seul si à deux si condition. 3) Afficher le code de filtre d'entrée –

+0

Merci pour votre considération; J'ai fait ce que j'ai reçu de votre commentaire mais pas ... travail :( – SDG69

+0

Je suppose que vous avez pris le code du filtre d'entrée de quelque part mais ne l'a pas modifié selon votre condition? –

Répondre

2

Solution 1: La solution la plus simple que je mentionnais est -

if(s.length()>=4){ 
    int year = Integer.parseInt(etDateYear.getText().toString()); 
if(year < 2015 && year > 1980) { 
    //do nothing input is proper 
} else { 
    etDateYear.setText("");  
} 

}

ou

if(s.length()>=4){ 
int year = Integer.parseInt(etDateYear.getText().toString()); 
if(!(year < 2015 && year > 1980)) { 
     etDateYear.setText(""); 
} 
} 

Solution 2: Utilisation de plusieurs cas est

if(s.length()>=4){ 
int year = Integer.parseInt(etDateYear.getText().toString()); 
if(year>1980){ 
    if(year<2015){ 
    //proper input 
    } else { 
    etDateYear.setText(""); 
    } 
} else { 
    etDateYear.setText(""); 
} 
} 
+0

Supprimer 2 commentaires et s'il vous plaît ajouter le rapport logcat complet à la question elle-même ... Aussi, si vous utilisez le textwatcher, alors supprimez le filtre d'entrée –

+0

setText() à "" Je l'ai changé pour un caractère, et je me demande quand je tape sur n'importe quel chiffre que ce caractère apparaît à EditText.) sont vrai mais toujours n'importe quel chiffre que j'ai ajouté à EditText surly moins que 1980 et c'est mon problème ici. J'espère que je pourrais le décrire bien à toi. – SDG69

+0

les autres choses est InputFilter est d'autres choses et je ne l'ai pas attaché à cette édition de texte, je veux juste montrer le InputFilter qui fonctionne pour 1 ~ 99. – SDG69