Android: Fill Spinner del código de Java mediante progtwigción

¿Cómo se puede llenar un spinner del código java programáticamente?

Tengo un spinner en el diseño de esta manera:

 

Con el código de Java, necesito crear el adaptador y agregar los elementos.

 // you need to have a list of data that you want the spinner to display List spinnerArray = new ArrayList(); spinnerArray.add("item1"); spinnerArray.add("item2"); ArrayAdapter adapter = new ArrayAdapter( this, android.R.layout.simple_spinner_item, spinnerArray); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); Spinner sItems = (Spinner) findViewById(R.id.spinner1); sItems.setAdapter(adapter); 

También para saber qué se selecciona, puede hacer algo como esto

 String selected = sItems.getSelectedItem().toString(); if (selected.equals("what ever the option was")) { } 

Aquí hay un ejemplo para progtwigr completamente:

  • inicia un Spinner.
  • llenarlo con datos a través de una lista de cadenas.
  • cambiar el tamaño del Spinner y agregarlo a mi Vista.
  • formatee la fuente de Spinner (tamaño de letra, color, relleno).
  • limpia el Spinner.
  • agregue nuevos valores al Spinner.
  • volver a dibujar el Spinner.

Estoy usando los siguientes vars de clase:

 Spinner varSpinner; List varSpinnerData; float varScaleX; float varScaleY; 

A – Inic y renderiza el Spinner (varRoot es un puntero a mi actividad principal):

 public void renderSpinner() { List myArraySpinner = new ArrayList(); myArraySpinner.add("red"); myArraySpinner.add("green"); myArraySpinner.add("blue"); varSpinnerData = myArraySpinner; Spinner mySpinner = new Spinner(varRoot); varSpinner = mySpinner; ArrayAdapter spinnerArrayAdapter = new ArrayAdapter(varRoot, android.R.layout.simple_spinner_item, myArraySpinner); spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); // The drop down vieww mySpinner.setAdapter(spinnerArrayAdapter); 

B – Cambiar el tamaño y agregar el Spinner a mi vista:

  FrameLayout.LayoutParams myParamsLayout = new FrameLayout.LayoutParams( FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.WRAP_CONTENT); myParamsLayout.gravity = Gravity.NO_GRAVITY; myParamsLayout.leftMargin = (int) (100 * varScaleX); myParamsLayout.topMargin = (int) (350 * varScaleY); myParamsLayout.width = (int) (300 * varScaleX);; myParamsLayout.height = (int) (60 * varScaleY);; varLayoutECommerce_Dialogue.addView(mySpinner, myParamsLayout); 

C: crea el controlador de clic y utilízalo para establecer la fuente.

  mySpinner.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView parentView, View selectedItemView, int myPosition, long myID) { Log.i("renderSpinner -> ", "onItemSelected: " + myPosition + "/" + myID); ((TextView) parentView.getChildAt(0)).setTextColor(Color.GREEN); ((TextView) parentView.getChildAt(0)).setTextSize(TypedValue.COMPLEX_UNIT_PX, (int) (varScaleY * 22.0f) ); ((TextView) parentView.getChildAt(0)).setPadding(1,1,1,1); } @Override public void onNothingSelected(AdapterView parentView) { // your code here } }); } 

D – Actualiza el Spinner con nuevos datos:

 private void updateInitSpinners(){ String mySelected = varSpinner.getSelectedItem().toString(); Log.i("TPRenderECommerce_Dialogue -> ", "updateInitSpinners -> mySelected: " + mySelected); varSpinnerData.clear(); varSpinnerData.add("Hello World"); varSpinnerData.add("Hello World 2"); ((BaseAdapter) varSpinner.getAdapter()).notifyDataSetChanged(); varSpinner.invalidate(); varSpinner.setSelection(1); } 

}

Lo que no he podido resolver en updateInitSpinners, es hacer varSpinner.setSelection (0); y tiene la configuración de fuente personalizada activada automáticamente.

ACTUALIZAR:

Esta solución “fea” resuelve varSpinner.setSelection (0); problema, pero no estoy muy contento con eso:

 private void updateInitSpinners(){ String mySelected = varSpinner.getSelectedItem().toString(); Log.i("TPRenderECommerce_Dialogue -> ", "updateInitSpinners -> mySelected: " + mySelected); varSpinnerData.clear(); ArrayAdapter spinnerArrayAdapter = new ArrayAdapter(varRoot, android.R.layout.simple_spinner_item, varSpinnerData); spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); varSpinner.setAdapter(spinnerArrayAdapter); varSpinnerData.add("Hello World"); varSpinnerData.add("Hello World 2"); ((BaseAdapter) varSpinner.getAdapter()).notifyDataSetChanged(); varSpinner.invalidate(); varSpinner.setSelection(0); } 

}

Espero que esto ayude……