Sto cercando un modo per nascondere un elemento in un widget spinner Android. Ciò consentirebbe di simulare uno spinner senza elementi selezionati e garantisce che il callback onItemSelected() venga sempre chiamato per ogni elemento selezionato (se l'elemento nascosto è quello "corrente"). Normalmente nella trottola c'è sempre un oggetto che non genera una richiamata, cioè quella corrente.Come nascondere un elemento in uno spinner Android
C'è del codice su stackoverflow per come disabilitare (grigio) gli oggetti, ma non come nascondere gli elementi completamente come se non esistessero.
Dopo molte sperimentazioni ho trovato una soluzione un po 'hacker che funziona su varie vecchie e nuove piattaforme Android. Ha alcuni piccoli inconvenienti cosmetici che sono difficili da notare. Mi piacerebbe ancora sentire una soluzione più ufficiale, a parte "non farlo con uno spinner".
Nasconde sempre il primo elemento nella casella di selezione, ma potrebbe essere facilmente esteso per nascondere un elemento arbitrario o più di un elemento. Aggiungi un oggetto fittizio contenente una stringa vuota all'inizio del tuo elenco di oggetti spinner. Potresti voler impostare la selezione corrente dello spinner sulla voce 0 prima che si apra la finestra di dialogo dello spinner, questo simulerà uno spinner non selezionato.
esempio di installazione Spinner con metodo ArrayAdapter di override:
List<String> list = new ArrayList<String>();
list.add(""); // Initial dummy entry
list.add("string1");
list.add("string2");
list.add("string3");
// Populate the spinner using a customized ArrayAdapter that hides the first (dummy) entry
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list) {
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent)
{
View v = null;
// If this is the initial dummy entry, make it hidden
if (position == 0) {
TextView tv = new TextView(getContext());
tv.setHeight(0);
tv.setVisibility(View.GONE);
v = tv;
}
else {
// Pass convertView as null to prevent reuse of special case views
v = super.getDropDownView(position, null, parent);
}
// Hide scroll bar because it appears sometimes unnecessarily, this does not prevent scrolling
parent.setVerticalScrollBarEnabled(false);
return v;
}
};
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
mySpinner.setAdapter(dataAdapter);
che cosa avete trovato sugli altri interwebs? Cosa hai provato fino ad ora? – dldnh
@dldnh vedere la modifica. – Georgie
Grazie per la soluzione, Georgie! – Yarovoy