Android Spinner con diferentes diseños para "drop down state" y "closed state"?

Tengo una vista de Android Spinner en mi diseño. Quisiera que el hilandero mostrara solamente un solo artículo del texto cuando esté cerrado, pero cuando el usuario hace clic en él (es decir abre el diálogo del hilandero) quisiera mostrar la información más extensa para cada artículo, incluyendo un icono y una descripción adicional del texto de la descripción . Como ahora es el spinner muestra el mismo diseño (icono, título + descripción) en ambos estados.

Si adjunto un ArrayAdapter al spinner, entonces tengo acceso a algo llamado "setDropDownViewResource", pero eso no es necesariamente lo que necesito, ya que mis datos spinner se obtiene de un Cursor no de un Array de cualquier tipo (tengo, a partir de ahora , Creé mi propio adaptador, extendiendo BaseAdapter).

¿Alguien que me pueda ayudar?

getView() crear una clase Adapter personalizada para el Spinner y sobrescribir los dos métodos getView() para la vista cerrada normal y getDropDownView() para la vista de lista desplegable. Ambos métodos deben devolver un objeto View para un solo elemento.

Echa un vistazo a este tutorial que puede ayudarte a empezar.

Yo estaba teniendo problema también. En lugar de reemplazar a la clase, tengo una manera más fácil de hacer esto.

Pero primero debes entender la diferencia entre el id de recurso en el constructor del adaptador y el otro en setDropDownViewResource. Por ejemplo,

 SimpleAdapter adapter = new SimpleAdapter(ab.getThemedContext(), data, R.layout.actionbar_dropdown, new String[] { "EventID", "Icon" }, new int[] { R.id.event_id, R.id.icon }); adapter.setDropDownViewResource(R.layout.actionbar_list_item); 

R.layout.actionbar_dropdown es el estilo de spinner y R.layout.actionbar_list_item para cada elemento de lista. He utilizado SimpleAdapter aquí, ya que si uso ArrayAdapter, el xml sólo puede ser un solo TextView. R.layout.actionbar_list_item contiene un TextView cuyo id es event_id y un ImageView cuyo id es icono. R.layout.actionbar_dropdown es casi exactamente lo mismo que actionbar_list_item. Pero la visibilidad de ImageView de este último se establece en GONE.

De esta manera, cada elemento de lista tiene una vista de texto y una vista de imagen, pero solo verá una vista de texto en la hiladora.

Utilizando el código del tutorial vinculado por Flo, creé el siguiente CustomSpinnerAdapter para mostrar dos conjuntos diferentes de cadenas, una cuando se muestran los elementos y otra cuando no. Espero que esto ayude a alguien.

 public class CustomSpinnerAdapter extends ArrayAdapter<String> { Context mContext; int mTextViewResourceId; String[] mObjects; String[] mShortNameObjects; public CustomSpinnerAdapter(Context context, int textViewResourceId, String[] objects, String[] shortNameObjects) { super(context, textViewResourceId, objects); mContext = context; mTextViewResourceId = textViewResourceId; mObjects = objects; mShortNameObjects = shortNameObjects; } @Override public View getDropDownView(int position, View convertView, ViewGroup parent) { LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); TextView row = (TextView) inflater.inflate(mTextViewResourceId, parent, false); row.setText(mObjects[position]); return row; } @Override public View getView(int position, View convertView, ViewGroup parent) { return getCustomView(position, convertView, parent); } public View getCustomView(int position, View convertView, ViewGroup parent) { LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); TextView row = (TextView) inflater.inflate(mTextViewResourceId, parent, false); row.setText(mShortNameObjects[position]); return row; } } 

Y el uso dentro de un Fragmento :

 CustomSpinnerAdapter mSpinnerAdapter = new CustomSpinnerAdapter(getActivity(), R.layout.spinner_item, getResources().getStringArray(R.array.action_filter), getResources().getStringArray(R.array.action_filter_short_names)); 

Finalmente, el diseño del elemento giratorio:

Spinner_item.xml

 <?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textSize="18dip" android:gravity="left" android:textColor="@color/navdraw_list_item_background_default" android:padding="5dip" /> 

Sólo establece el recurso de vista desplegable con el diseño alternativo:

 ArrayAdapter<String> genderAdapter = new ArrayAdapter<>(this, R.layout.adapter_spinner_white, Constants.GENDER); genderAdapter.setDropDownViewResource(R.layout.adapter_spinner_white_dropdown); view.setAdapter(genderAdapter); 

Para mí, es sólo un diseño con un relleno adicional a la izquierda, porque mi fondo de spinner es un redondeado dibujable y requieren este espacio extra.

  • Ajuste del valor de la hiladora dinámicamente
  • Cómo configurar un spinner onClickListener () en Android
  • Spinner: onItemSelected no se llama cuando el elemento seleccionado permanece igual
  • Android spinner no activó onItemSelected
  • Cómo abrir una ruleta con un solo clic cuando otra ruleta está abierta
  • Actualizar City Spinner con notifyDataSetChanged después de seleccionar estado
  • Android - Set Spinner Punto de inicio
  • Tamaño del texto de un spinner
  • Modificar el tamaño de un Android Spinner Drop down tamaño de la parte?
  • Android: ¿Cómo vincular a spinner a la lista de objetos personalizados?
  • Cómo usar spinner
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.