2017-09-08 4 views
4

erreur normale affichée en utilisant la méthode setError():SetError alongwith onClick pour EditText

Screenshot #1

Problème:

Screenshot #2

Ok donc j'ai une autre EditText dans la même boîte de dialogue ayant un OnClickListener pour montrer la DatePicker dialogue. Quand je setError() il montre l'icône d'alerte rouge et quand je clique sur cette icône, l'événement est toujours géré par OnClick sur EditText et DatePicker apparaît, donc je ne peux pas afficher le message d'erreur. Ce que je veux: Si je clique sur l'icône, il doit montrer le message d'erreur, et si je clique à l'extérieur de l'icône, il devrait afficher le DatePicker.

+0

utiliser la mise en page personnalisée et ne gère même –

Répondre

0

Une solution simple consiste à vérifier si l'erreur est nulle dans onclickListener. -à-dire,

if(((EditText)view).getError() == null) { 
//Handle your click for showing picker 
} 
0

vous pouvez utiliser ce code ci-dessous en fonction de votre code lorsque tous les champs complet et deuxième erreur de jeu de modifier le texte de date à null.any requête, vous pouvez demander

mEditText.setError(null);//removes error 
mEditText.clearFocus(); //clear focus from edit text 
+0

Comment cela résoudre le problème qu'il a? Il ne veut pas juste enlever l'erreur. Lisez la question s'il vous plaît. – Vucko

2

homme Oh, J'ai littéralement eu ce problème il y a 2 jours. J'ai trouvé aucun moyen de faire les deux ont mise au point (pour afficher le message, et aussi créer un pop-up du sélecteur de date Ce que je fini par faire est enroulant EditText dans un TextInputLayout comme celui-ci.

<android.support.design.widget.TextInputLayout 
      android:id="@+id/birthDateInputLayout" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content"> 

      <EditText 
       android:id="@+id/input_birth_date" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:hint="@string/birth_date_hint" 
       android:inputType="date" /> 
     </android.support.design.widget.TextInputLayout> 

Et puis au lieu de définir l'erreur sur le texte d'édition, je mis l'erreur sur le TextInputLayout plutôt comme ceci:

birthDateInputLayout.setErrorEnabled(true); 
birthDateInputLayout.setError("This field cannot be empty."); 

REMARQUE: Il ne exactement la même que la façon régulière de la mise en erreur sur EditText, mais il semble assez bien et résout le problème un peu différemment.

Voici une capture d'écran de la façon dont il ressemble: enter image description here

+0

Merci! Je vais envisager de changer d'interface si rien d'autre ne fonctionne. Pour l'instant, à la recherche d'une solution sans modification de l'interface utilisateur autant que possible. – Xc0d3r

+1

@ Xc0d3r Je pense que vous devriez procéder avec cette solution, même si cela signifie de changer votre code. De cette façon, vous aurez un code propre qui fonctionne bien, comparé à d'éventuels hacks que vous devrez écrire pour que l'autre solution fonctionne. Et sur une opinion plus personnelle, je déteste vraiment ce mode pour afficher une erreur, il a l'air vraiment mauvais et ne se confond pas avec le Material Design. –

+0

Je suis d'accord @IulianPopescu, mon voisin :) Cela se fond vraiment bien dans le matériau beaucoup mieux. Mais si l'OP veut toujours chasser son idée originale, c'est bien aussi. Ma solution peut encore aider quelqu'un après tout. – Vucko

0

Essayez ce,

onClick(View v){ 
    if(editText.getError() != null){ 
     editText.requestFocus(); // to show error message 
    }else{ 
     // open date picker dialog here or do you stuff here 
    } 

espère que cela aide

+0

Merci! cela fonctionne mais seulement quand le 'EditText' est ** focusable **. Malheureusement dans mon cas, je ne veux pas que l'utilisateur saisisse la date manuellement. Une solution à laquelle je pensais était d'utiliser 'TextView' au lieu de' EditText'. – Xc0d3r

+0

vous pouvez limiter l'utilisateur à taper edittext dans votre cas, juste pour afficher le message d'erreur seulement. –

+0

après avoir demandé le focus, utilisez cette propriété editText.setInputType (InputType.TYPE_NULL); –