Como ocultar um item em um Android Spinner
Estou procurando uma maneira de ocultar um item em um widget giratório do Android. Isso permitiria simular um girador sem itens selecionados e garantir que o retorno de chamada onItemSelected () seja sempre chamado para cada item selecionado (se o item oculto for o "atual"). Normalmente, sempre há um item no girador que não gera um retorno de chamada, ou seja, o atua
Existe algum código no stackoverflow para saber como desativar itens (acinzentados), mas não como ocultar itens completamente como se eles não existisse
Depois de muita experimentação, eu vim com uma solução um tanto hack-ish que funciona em várias plataformas Android antigas e novas. Tem algumas desvantagens cosméticas menores que são difíceis de notar. Eu ainda gostaria de ouvir sobre uma solução mais oficial, além de "não faça isso com um girador".
Este sempre oculta o primeiro item no botão giratório, mas pode ser facilmente estendido para ocultar um item arbitrário ou mais de um item. Adicione um item fictício que contenha uma string vazia no início da sua lista de itens giratórios. Convém definir a seleção atual do controle giratório para o item 0 antes que a caixa de diálogo seja aberta, isso simulará um controle giratório não selecionad
xemplo de configuração do @Spinner com a substituição do método ArrayAdapter:
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);