2015-01-30 8 views
21

Mi piacerebbe essere in grado di chiamare il codice come questo, simile a come setError è situato su una TextView:Come può essere impostato un messaggio di errore per lo Spinner in Android?

spinner.setError("Error message"); 

Tuttavia, setError funziona solo per un EditText, non per uno Spinner.

Desidero notificare all'utente se il campo di selezione non è selezionato. Come posso eseguire tale notifica senza utilizzare un Toast?

+0

possibile duplicato di [Creare un setError() per la Spinner] (http://stackoverflow.com/questions/3749971/creating-a- seterror-per-the-spinner) – Axalo

+0

Il metodo Seterror non è disponibile per lo spinner..un deve creare un'altra funzione o un messaggio per visualizzarlo. – zyonneo

risposta

42

ci sono un paio di soluzioni in questa discussione Creating a setError() for the Spinner:

uno Il EdmundYeung99 s' funziona per me, o si utilizza il proprio adattatore o meno. Basta inserire il seguente codice nella funzione validate:

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 

Ma, assicuratevi di avere almeno un valore l'adattatore Spinner quando si sta facendo la vostra verifica. In caso contrario, come un adattatore vuoto in attesa di essere popolano, rendere il vostro adattatore di ottenere una stringa vuota:

ArrayAdapter<String> adapter = new ArrayAdapter<>(context, android.R.layout.simple_spinner_item, new String[]{""}); 
mySpinner.setAdapter(adapter); 
+0

Questo ha funzionato perfettamente per me. Passate ore alla ricerca di un modo per farlo, questa è la soluzione migliore. – user2029541

+0

Grazie, felice che aiuti! –

+0

Funziona come un incantesimo, grazie –

17

classe Spinner restituirà un TextView quando si utilizza getSelectedView(). Quindi puoi usare setError() indirettamente.

((TextView)spinner.getSelectedView()).setError("Error message"); 

I risultati dovrebbero essere come ...

setError in spinner

Spero che sarà utile!

+2

Ottima idea, ma si interrompe se nessun elemento è selezionato, in tal caso restituisce null. –

+0

La soluzione non sta per soddisfare tutti i casi. Potrebbero esserci molte altre condizioni e casi d'uso.Dipende da te come stai facendo uso di questo frammento. :) – Khan

+0

Questo mostra solo che c'è un errore nello spinner. Non allude a quale sia l'errore ... – marienke

2

Here is a solution che utilizza un TextView nascosto per visualizzare un messaggio pop-up, oltre all'icona di errore nella casella di selezione. Quando in stato di errore, lo Spinner si presenta così:

Spinner in invalid state

Quando non è in uno stato di errore, sembra che questo.

Spinner in valid state

La soluzione completa è documentato qui: https://stackoverflow.com/a/29956372/3063884