Cómo ocultar un elemento en un Android Spinner

Estoy buscando una manera de ocultar un elemento en un widget de Android spinner. Esto le permitiría simular una ruleta sin elementos seleccionados, y asegura que la devolución de llamada onItemSelected () siempre se llame para cada elemento seleccionado (si el elemento oculto es el "actual"). Normalmente, siempre hay un elemento en la ruleta que no genera una devolución de llamada, a saber, el actual.

Hay algo de código en stackoverflow para cómo deshabilitar elementos (gris), pero no cómo ocultar elementos por completo como si no existieran.

Después de mucha experimentación, he encontrado una solución algo hack-ish que funciona en varias plataformas de Android antiguas y nuevas. Tiene algunos inconvenientes cosméticos menores que son difíciles de notar. Todavía me gustaría saber de una solución más oficial, aparte de "no hagas eso con una ruleta".

Esto siempre oculta el primer elemento en la ruleta, pero podría extenderse con bastante facilidad para ocultar un elemento arbitrario o más de un elemento. Agregue un elemento ficticio que contenga una cadena vacía al comienzo de su lista de elementos giratorios. Es posible que desee establecer la selección actual de la ruleta en el elemento 0 antes de que se abra el cuadro de diálogo de la ruleta, esto simulará una ruleta no seleccionada.

jemplo de configuración de @Spinner con anulación del 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);