Android: sugerencia de Spinner

¿Hay alguna manera de hacer una sugerencia para un spinner similar a la sugerencia que se proporciona para editar campos de texto. Sé que puede usar un aviso que le proporcione una barra de título, pero aún deja en blanco el campo de ruteo inicial hasta que haga clic en el ruleta. Actualmente tengo una forma cruda de establecer un campo ficticio como la primera parte de la matriz spinner, que es la pregunta y luego hacer una comprobación al final para asegurarme de que la ruleta no es igual a la cadena de preguntas. ¿Hay alguna manera más limpia / mejor de hacer esto?

¡Gracias!

Aquí hay una solución que es probablemente un poco más simple que el código Ravi Vyas (¡gracias por la inspiración!):

ArrayAdapter adapter = new ArrayAdapter(getActivity(), android.R.layout.simple_spinner_dropdown_item) { @Override public View getView(int position, View convertView, ViewGroup parent) { View v = super.getView(position, convertView, parent); if (position == getCount()) { ((TextView)v.findViewById(android.R.id.text1)).setText(""); ((TextView)v.findViewById(android.R.id.text1)).setHint(getItem(getCount())); //"Hint to be displayed" } return v; } @Override public int getCount() { return super.getCount()-1; // you dont display last item. It is used as hint. } }; adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); adapter.add("Item 1"); adapter.add("Item 2"); adapter.add("Hint to be displayed"); spinner.setAdapter(adapter); spinner.setSelection(adapter.getCount()); //display hint 

Puede configurar su propio adaptador giratorio y sobreponer el método getView para mostrar la sugerencia en lugar de un elemento. He creado un proyecto de muestra en github, compruébalo aquí

Una forma aún más fácil que la configuración de su propio adaptador de giro es simplemente usar un botón y estilo como un objeto giratorio con

 android:background="@android:drawable/btn_dropdown" 

Luego configure el evento onClick del botón para abrir un diálogo de selección de un solo elemento. A continuación, puede hacer lo que quiera con el texto del botón.

Esta ha sido mi forma preferida de manejar esto por un tiempo. Espero que ayude a alguien.

EDITAR: He estado jugando con esto de nuevo recientemente (y alguien me pidió que publicara un ejemplo hace un tiempo). Esta estrategia se verá un poco diferente si estás usando el tema Holo. Sin embargo, si está utilizando otros temas como Theme.Black, esto se verá idéntico.

Para demostrar esto, hice una aplicación simple que tiene un Spinner regular junto con mi botón giratorio personalizado. Lo tiré en un repository de GitHub , pero así es como se ve la actividad:

 package com.stevebergamini.spinnerbutton; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Spinner; public class MainActivity extends Activity { Spinner spinner1; Button button1; AlertDialog ad; String[] countries; int selected = -1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); spinner1 = (Spinner) findViewById(R.id.spinner1); button1 = (Button) findViewById(R.id.button1); countries = getResources().getStringArray(R.array.country_names); // You can also use an adapter for the allert dialog if you'd like // ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_dropdown_item, countries); ad = new AlertDialog.Builder(MainActivity.this).setSingleChoiceItems(countries, selected, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { button1.setText(countries[which]); selected = which; ad.dismiss(); }}).setTitle(R.string.select_country).create(); button1.setOnClickListener( new OnClickListener(){ @Override public void onClick(View v) { ad.getListView().setSelection(selected); ad.show(); }}); } }