Comment définir un message d'erreur pour le Spinner dans Android?

j'aimerais pouvoir appeler un code comme celui-ci, similaire à la façon dont setError est défini sur un TextView:

spinner.setError("Error message");

Toutefois, setError ne fonctionne que pour un EditText, pas pour un Spinner.

je veux prévenir l'utilisateur si le champ spinner n'est pas sélectionné. Comment puis-je effectuer une telle notification sans porter un Toast ?

30
demandé sur CJBS 2015-01-30 15:12:44

3 réponses

il y a quelques solutions dans ce fil créant un setError () pour le fileur :

le EdmundYeung99 l 'un fonctionne pour moi, soit vous utilisez votre propre adaptateur ou pas. Il suffit de mettre le code suivant dans votre fonction de validation:

TextView errorText = (TextView)mySpinner.getSelectedView();
errorText.setError("");
errorText.setTextColor(Color.RED);//just to highlight that this is an error
errorText.setText("my actual error text");//changes the selected item text to this

mais, assurez-vous que vous avez au moins une valeur dans l'adaptateur Spinner lorsque vous faites votre vérification. Si ce n'est pas le cas, comme un adaptateur vide être peuplé, faire votre adaptateur obtenir une chaîne vide:

ArrayAdapter<String> adapter = new ArrayAdapter<>(context, android.R.layout.simple_spinner_item, new String[]{""});
mySpinner.setAdapter(adapter);
55
répondu Lionel T. 2017-05-23 12:34:10
La classe

renvoie un textview lorsque vous utilisez getSelectedView() . Vous pouvez donc utiliser setError() indirectement.

((TextView)spinner.getSelectedView()).setError("Error message");
Les résultats

devraient être les mêmes ...

setError in spinner

espérons qu'il sera utile!

25
répondu Khan 2018-01-03 11:53:25

Voici une solution qui utilise un TextView caché pour faire apparaître un message pop-up, en plus de l'icône d'erreur dans le spinner. Dans un État d'erreur, le Spinner ressemble à ceci:

Spinner in invalid state

quand il n'est pas dans un État d'erreur, il ressemble à ceci.

Spinner in valid state

la solution complète est documentée ici: https://stackoverflow.com/a/29956372/3063884

2
répondu CJBS 2017-05-23 12:25:57