Cómo configurar el texto del hilandero actual sin cambiar los elementos de la lista de selección asociada

Tengo un Spinner con algunos valores

| Monday | | Thuesday | | Wednesday | | Thursday | | Friday | | Saturday | | USER DEFINED | 

Cuando el usuario elige USER DEFINED , puede ingresar un valor personalizado en un diálogo, suponiendo que obtengo este valor como String userDef="Your choice" .

Necesito establecer esta cadena como elemento actual, sin cambiar la lista de selección de hilanderos, que debe aparecer igual que la descrita anteriormente, también cuando el usuario vuelva a hacer clic en el hilandero, algo así como en la aplicación de Android de Google Analytics, vea la imagen.

Spinner sin clics Unclicked spinner Google Analytics Haga clic en la ruleta Clicked spinner Google Analytics

¿Cómo podría hacer esto?

El detalle clave para implementar esto es que la interfaz SpinnerAdapter usada usada por el Spinner tiene dos métodos diferentes pero relacionados:

  • getView() – crea la vista que se muestra en el propio Spinner.
  • getDropDownView() – crea la vista que se muestra en el menú desplegable.

Por lo tanto, para tener un elemento que se muestra de forma diferente en el pop-up vs en el hilandero en sí, sólo tiene que implementar estos dos métodos de manera diferente . Dependiendo de los detalles de su código, los detalles pueden variar, pero un ejemplo simple sería algo así como:

 public class AdapterWithCustomItem extends ArrayAdapter<String> { private final static int POSITION_USER_DEFINED = 6; private final static String[] OPTIONS = new String[] { "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Custom..." }; private String mCustomText = ""; public AdapterWithCustomItem(Context context){ super(context, android.R.layout.simple_spinner_dropdown_item, OPTIONS); } @Override public View getView(int position, View convertView, ViewGroup parent) { View view = super.getView(position, convertView, parent); if (position == POSITION_USER_DEFINED) { TextView tv = (TextView)view.findViewById(android.R.id.text1); tv.setText(mCustomText); } return view; } public void setCustomText(String customText) { // Call to set the text that must be shown in the spinner for the custom option. mCustomText = customText; notifyDataSetChanged(); } @Override public View getDropDownView(int position, View convertView, ViewGroup parent) { // No need for this override, actually. It's just to clarify the difference. return super.getDropDownView(position, convertView, parent); } } 

A continuación, cuando el usuario introduce el valor personalizado, sólo tiene que llamar al método setCustomText() en el adaptador con el texto que desea mostrar.

 mAdapter.setCustomText("This is displayed for the custom option"); 

Que produce el siguiente resultado:

Introduzca aquí la descripción de la imagen

Puesto que sólo está sobreescribiendo el método getView() , el desplegable sigue mostrando el mismo texto definido en la opción.

Creo que la mejor manera es implementar un adaptador de matriz personalizado. Primero cree una clase para cada entrada:

 public class Choice { // Represents the underlying value public String value; // Represents the user-displayed value public String text; public Choice(String value, String text) { this.value = value; this.text = text; } // Only the text will be shown, not the underlying value @Override public String toString() { return text; } } 

A continuación, declare su adaptador de objetos Choice : ArrayAdapter<Choice> . Sólo se mostrará el texto definido y podrá acceder al valor subyacente siempre que se seleccione un elemento:

 @Override public void onItemSelected(AdapterView<?> arg0, View arg1, int position, long arg3) { Choice choice = adapter.get(position); // Set the value of the choice, not the text myValue = choice.value; } 

Puede agregar la cadena USER DEFINED a la lista Array>

Llamada notifyDatasetChanged ()>

Obtener el tamaño de la nueva lista de array>

Y luego llame

  spinner.setSelection(Index of USER DEFINED); 

o

  spinner.setSelection(Arraylist.size()-1); 
  • Llame al valor de un spinner? Además, utilice otros valores basados ​​en el valor de un spinner
  • ID de configuración de los elementos de Spinner
  • Cómo abrir una ruleta con un solo clic cuando otra ruleta está abierta
  • ¿Cómo obtener el valor de Spinner?
  • Elemento deshabilitado en la lista de hilanderos
  • Establecer foco en el hilador cuando se selecciona en android
  • Android Spinner: Obtener el evento de cambio de elemento seleccionado
  • Android Spinner utilizando ArrayList <String>
  • Alternativa a la CLASE SPINNER ALTAMENTE FLAWED en Android
  • Cómo ocultar un elemento en un Spinner de Android
  • Cómo ocultar spinner dropdown android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.