Inicializar un Ítem Especifico de un Spinner Según su Posición

Para poder inicializar un ítem especifico de un Spinner según su posición, vamos a utilizar un método predefinido que tienen los spinners (setSelection()). La función sirve para poder inicializar un ítem x especifico según su posición, el cual acepta un valor entero.

Ejemplo

Lista spinner con nombre de frutas favoritas:

  • Pera - (posición 0)
  • Mango - (posición 1)
  • Fresa - (posición 2)
  • Sandía - (posición 3)
  • Melón - (posición 4)
  • Uva - (posición 5)
  • Arándano - (posición 6)
  • Naranja - (posición 7)
  • Cereza - (posición 8)
  • Higo - (posición 9)
  • Papaya - (posición 10)

La lista de nuestro spinner comienza en la posición 0 por que así fueron diseñados, continuando el articulo que deseamos modificar el usuario selecciono que su fruta favorita es Cereza que se encuentra en el posición 8, pero cuando cargamos los datos para modificar el articulo, el spinner muestra el primer valor que seria Pera posición 0, lo ideal seria que se inicialize en el ítem Cereza posición 8. Una vez cargado el valor correcto se procedería a seleccionar otro tipo de fruta.

En este tutorial vamos a implementar un método para inicializar un ítem de un spinner según su posición.

Te recomiendo ver el artículo Cargar Datos en un Spinner - Android

XML

Código XML con el que vamos a trabajar.

strings.xml

Agrega esta linea de código en el archivo strings.xml, el cual se encuentra en la carpeta values > strings.xml , ver aquí

<resources>  
    <string name="seleccione_una_fruta">Seleccione una fruta:</string>
</resources>  

Spinner

Agrega este código XML, en el layout vinculado a tu archivo java. En este ejemplo nuestro layout tiene por nombre activity_inicializar_item_spinner.xml

<Spinner  
        android:id="@+id/sp_frutas"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:prompt="@string/seleccione_una_fruta"
        android:spinnerMode="dialog"/>

Código Android

Código Android para realizar la tarea. Nombre del archivo InicializarItemSpinnerActivity.java

//Modifica esta linea
package com.a01luisrene.tutoriales;

import android.support.v7.app.AppCompatActivity;  
import android.os.Bundle;  
import android.widget.ArrayAdapter;  
import android.widget.Spinner;

import com.a01luisrene.tutoriales.R;

import java.util.ArrayList;  
import java.util.Collections;  
import java.util.List;

public class InicializarItemSpinnerActivity extends AppCompatActivity {

    Spinner spFrutas;
    List<String> listaFrutas;
    ArrayAdapter<String> adapterSpinner;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_inicializar_item_spinner);

        spFrutas = (Spinner) findViewById(R.id.sp_frutas);
        listaFrutas = new ArrayList<>();

        //Arreglo String de frutas
        String[] frutas = {"Pera", "Mango", "Fresa", "Sandía", "Melón",
                "Uva", "Arándano", "Naranja", "Cereza", "Higo", "Papaya"};
        //Cargo las frutas en listaFrutas
        Collections.addAll(listaFrutas, frutas);
        //Paso los valores a mi adapter
        adapterSpinner = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, listaFrutas);
        //Linea de código secundario sirve para asignar un layout a los ítems
        adapterSpinner.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        //Muestro los ítems en el spinner, obtenidos gracias al adapter
        spFrutas.setAdapter(adapterSpinner);

        //String que almacena el nombre de la fruta donde inicializara el valor ítem del spinner
        //ESTE STRING LO PODEMOS OBTENER DE DIFERENTES FORMAS (DESDE UN BASE DE DATOS, UN ARREGLO, ...)
        String inicializarItem = "Cereza";

        /**
         * setSelection(): sirve para inicializar una posición especifica(recibe un valor entero)
         *
         * Este método realiza la magia
         * obtenerPosicionItem(): recibe dos parámmetros un spinner y un String
         */
        spFrutas.setSelection(obtenerPosicionItem(spFrutas, inicializarItem));

    }

    //=========================================================================================//
    //=================================MÉTODO QUE REALIZA LA TAREA=============================//
    //=========================================================================================//

    //Método para obtener la posición de un ítem del spinner
    public static int obtenerPosicionItem(Spinner spinner, String fruta) {
        //Creamos la variable posicion y lo inicializamos en 0
        int posicion = 0;
        //Recorre el spinner en busca del ítem que coincida con el parametro `String fruta`
        //que lo pasaremos posteriormente
        for (int i = 0; i < spinner.getCount(); i++) {
            //Almacena la posición del ítem que coincida con la búsqueda
            if (spinner.getItemAtPosition(i).toString().equalsIgnoreCase(fruta)) {
                posicion = i;
            }
        }
        //Devuelve un valor entero (si encontro una coincidencia devuelve la
        // posición 0 o N, de lo contrario devuelve 0 = posición inicial)
        return posicion;
    }
}

Demo

Aquí pueden apreciar la tarea culminada.

Demo inicializar ítem spinner
Luis Rene Mas Mas's Picture

Luis Rene Mas Mas

Hola, soy desarrollador front-end & dasarrollador móvil (Android), me encanta las tecnologías web - móvil, también administro este blog.

Trujillo - Perú @01luisrene

Únete al Blog

Obtén los últimos artículos publicados directamente en tu bandeja de entrada.

O suscríbase vía RSS con Feedly!

Comparte tu Opinión