Sunday, April 15, 2012

Rellenando un spinner manualmente (Android)

Hay distintas formas para llenar un spinner en Android. En la página de desarrolladores de Android, hay un tutorial para llenar un spinner a través de una lista estática creada en la carpeta de recursos, pero qué pasa si uno la quiere llenar de forma dinámica, donde los valores que se incluyan dependen de cierto parámetro?
Para este problema encontré un tutorial muy bueno, fácil y rápido para solucionar este problema.

Primero, debemos crear un adpatador del tipo CharSequence donde agregaremos los items que queremos. Para eso tenemos las siguientes lineas de código:

 ArrayAdapter <CharSequence> adapter =
  new ArrayAdapter <CharSequence> (this, android.R.layout.simple_spinner_item );
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

No deben cambiar nada de lo de arriba.
Luego deben agregar los itemes a mostrar de la forma

adapter.add("item 1");

Luego asignamos estos datos al spinner que queremos:


Spinner s = (Spinner) findViewById(R.id.mi_spinner);

        		s.setAdapter(adapter);


y listo!

Bookmark and Share

Friday, April 6, 2012

Diálogo de selección multiple

Encontré un excelente tutorial para crear diálogos de multiselección en Android, lo comparto con ustedes aquí un poco modificado y con algunos comentarios y sugerencias para que no tengan los mismos problemas que yo:


Primero, deben decidir desde donde quieren mostrar este diálogo, es decir qué quieren que gatille el diálogo. Puede ser un botón cualquiera, un botón  en el menú de opciones o puedes querer que se gatille cada vez que se inicie una nueva actividad (un Intent nuevo).

Independiente de cómo quieran que se gatille, deben realizar la misma llamada en los correspondientes métodos donde se gatillan las actividades de cada una de las cosas de arriba. Es decir, para el caso del botón colocarlo en el OnClick(...), en el caso del menú de opciones en el onOptionsItemSelected(...) y en el caso de una actividad, en el onCreate(...). Lo que deben colocar es:

showDialog( 0 );

Antes de crear el diálogo. Debemos crear un arreglo de las opciones a mostrar en el diálogo como atributos de la clase, de esta manera:

public CharSequence[] dialogOptions = {"opción 1", "opción 2", "opción 3"};
y también crear un arreglo de booleanos donde se guardará la información sobre las opciones seleccionadas. Este segundo arreglo debe tener el mismo largo:

public boolean[] dialogSelections =  new boolean[ dialogOptions.length ];
Luego se deben crear 3 métodos, en la misma clase donde se llama a showDialogo(0);
El primero crea el diálogo:


@Override

 protected Dialog onCreateDialog( int id ) {

  return new AlertDialog.Builder( this )
          .setTitle( "Título del diálogo")
                .setMultiChoiceItems( dialogOptions, dialogSelections, new DialogSelectionClickHandler() )
                .setPositiveButton( "OK", new DialogButtonClickHandler() )
                .create();
 }



en el setMultiChoiceItems, se le entregan las opciones a desplegar, el arreglo donde guardar la selección y un Handler que puede realizar algo cada vez que se seleccionar una opción. Este último es algo así:


public class DialogSelectionClickHandler implements OnMultiChoiceClickListener {

  @Override

  public void onClick(DialogInterface arg0, int arg1, boolean arg2{
    //no hace nada por ahora
   //si se saca la selección no funciona
  }
 }

Si no necesitan hacer nada, le recomiendo que lo coloquen igual. Al menos a mi no me guardaba la selección a menos que tuviera el método creado.

Por último, el método que realiza la acción una vez que se hace click en el botón "aceptar" u "ok", como le hayan llamado. Este es el método:


public class DialogButtonClickHandler implements DialogInterface.OnClickListene {

  public void onClick( DialogInterface dialog, int clicked ) {

   switch( clicked ) {
    case DialogInterface.BUTTON_POSITIVE:
     //realizan sus acciones acá.

     break;
   }
  }
 }

Eso es todo.


Bookmark and Share
Related Posts Plugin for WordPress, Blogger...