Todo sobre como usar el controlador spinner en android

Como están amig@s hoy vamos hablar sobre el controlador spinner absolutamente todoooo, de forma básica para que de una vez no te queden dudas, te recomiendo que dejes de pensar en cosas como por ejemplo como extraer el id de mi spinner de una base de datos, o como obtener el numero bla bla, eso también lo veremos pero te aconsejo que te tomes diez minutos de este tutorial y te vuelvas todo un experto sobre el tema, sin mas rodeos empezamos.

Para controlar cuando un elemento del Spinner es seleccionado existe el método onItemSelected(), semejante al onClick() que se usa para los RadioButton o los Button. Entonces vamos hacer un ejercicio simple sobre como seleccionar un item de un spinner y luego pasarlo  a un textView.

Para este ejercicio necesitamos
Un spinner con id spinner
Un textView con id resultado

Nuestro MainActivity seria el siguiente:
Donde tenemos un arreglo llamado frutas, con diferentes tipos de frutas luego lo en nuestra clase ListaFrutas usamos el OnItemSelectedListener para obtener el item seleccionado.

public class MainActivity extends AppCompatActivity {

String[] frutas = { "Ninguno", "Fresa", "Manzana",
"Uva", "Naranja", "Coco",
"Pera", "Banana", "Mandarina"};

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

Spinner spFrutas = (Spinner) findViewById (R.id.spinner);
// Defino el adaptador para el Spinner
ArrayAdapter<String> aa_paises = new ArrayAdapter<String>
(this, android.R.layout.simple_spinner_item, frutas);
// Asigno el adaptador al Spinner
spFrutas.setAdapter(aa_paises);
// Asigno el listener al Spinner
spFrutas.setOnItemSelectedListener(new ListaFrutas());
}

public class ListaFrutas implements AdapterView.OnItemSelectedListener {

// Metodo onItemSelected en el que indicamos lo que queremos hacer
// cuando sea seleccionado un elemento del Spinner
public void onItemSelected(AdapterView<?> parent,
View view, int pos, long id) {
TextView resultado = (TextView) findViewById (R.id.resultado);
// muestro en un TextView el nombre de alguna fruta seleccionada.
resultado.setText("Ha seleccionado: "+
parent.getItemAtPosition(pos). toString());
}
public void onNothingSelected(AdapterView<?> parent) {
// Do nothing.
}
}
}

A continuación les dejo el ejercicio para que lo descarguen desde aquí

Como ya sabes como seleccionar un item de un spinner aumentemos la dificultad, la idea es que al seleccionar un item del spinner 1 el spinner 2 nos muestre algo.

Entonces tendríamos una forma gráfica como la siguiente:

A continuación les dejo el código en modo texto del activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.androfast.pc.appseleccionarspinneractivarotro.MainActivity">

<LinearLayout
android:layout_width="368dp"
android:layout_height="495dp"
tools:layout_editor_absoluteX="8dp"
tools:layout_editor_absoluteY="8dp"
android:weightSum="1"
android:orientation="vertical">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Seleccionar una Fruta"
android:textStyle="bold"></TextView>

<Spinner
android:id="@+id/frutas"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="50px"
android:entries="@array/arrayFrutas"></Spinner>

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="50px"
android:text="Seleccionar un color de Fruta"
android:textStyle="bold"></TextView>

<Spinner
android:id="@+id/colores"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="50px"
/>

</LinearLayout>

</android.support.constraint.ConstraintLayout>

Ahora debemos crear un archivo llamado arrays.xml dentro de la carpeta values, que se encuentra dentro de la carpeta res.

Este contendrá los colores de cada una de las frutas que se elijan:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="arrayFrutas">
<item>Ninguno</item>
<item>Manzana</item>
<item>Pera</item>
<item>Banana</item>
<item>Uva</item>
</string-array>
<string-array name="arrayManzana">
<item>Roja</item>
<item>Verde</item>
<item>Amarilla</item>
</string-array>
<string-array name="arrayPera">
<item>Verde</item>
<item>Amarilla</item>
</string-array>
<string-array name="arrayBanana">
<item>Verde</item>
<item>Amarilla</item>
</string-array>
<string-array name="arrayUva">
<item>Verde</item>
<item>Morada</item>
</string-array>
<string-array name="arrayDefecto">
<item>--</item>
</string-array>
</resources>

Ahora nuestro MainActivity.java

package com.androfast.pc.appseleccionarspinneractivarotro;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;

public class MainActivity extends Activity {

Spinner spFrutas;
ArrayAdapter<CharSequence> a_manzana;
ArrayAdapter<CharSequence> a_pera;
ArrayAdapter<CharSequence> a_banana;
ArrayAdapter<CharSequence> a_uva;
ArrayAdapter<CharSequence> a_default;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

Spinner spFrutas= (Spinner) findViewById(R.id.frutas);
spFrutas.setOnItemSelectedListener(new ListaFrutas());
}
public class ListaFrutas implements AdapterView.OnItemSelectedListener {

public void onItemSelected(AdapterView<?> parent,
View view, int pos, long id) {
cargaSpinnerFruta(parent.getSelectedItemPosition());
}
public void onNothingSelected(AdapterView<?> parent) {
}
}
private void cargaSpinnerFruta(int frutas){

spFrutas = (Spinner) findViewById(R.id.colores);
a_manzana = ArrayAdapter.createFromResource
(this, R.array.arrayManzana,
android.R.layout.simple_spinner_item);
a_pera = ArrayAdapter.createFromResource
(this, R.array.arrayPera,
android.R.layout.simple_spinner_item);
a_banana = ArrayAdapter.createFromResource
(this, R.array.arrayBanana,
android.R.layout.simple_spinner_item);
a_uva = ArrayAdapter.createFromResource
(this, R.array.arrayUva,
android.R.layout.simple_spinner_item);
a_default = ArrayAdapter.createFromResource
(this, R.array.arrayDefecto,
android.R.layout.simple_spinner_item);

switch (frutas) {
case 1: spFrutas.setAdapter(a_manzana);
break;
case 2: spFrutas.setAdapter(a_pera);
break;
case 3: spFrutas.setAdapter(a_pera);
break;
case 4: spFrutas.setAdapter(a_uva);
break;
default: spFrutas.setAdapter(a_default);
break;
}
}
}

A continuación les dejo el ejercicio para que lo descarguen desde aquí

Al principio vimos un ejercicio donde seleccionamos una fruta del spinner y luego la pasábamos a un texview pero que pasaría si nosotros necesitamos pasar la posición, osea que si elegimos Manzana en ves de que se muestre Manzana se muestre el numero uno el cual seria su posición de la lista de frutas.
Para obtener el item seria así:

resultado.setText("Ha seleccionado: "+parent.getItemAtPosition(pos).toString());

Para obtener la posición seria así:

resultado.setText("Ha seleccionado: "+parent.getItemIdAtPosition(pos));

Para este ejercicio necesitamos
Un spinner con id spinner
Un textView con id resultado

Nuestro MainActivity seria el siguiente:
Donde tenemos un arreglo llamado frutas, con diferentes tipos de frutas luego lo en nuestra clase ListaFrutas usamos el  getItemIdAtPosition  dentro del  OnItemSelectedListener para obtener el ítem seleccionado.

public class MainActivity extends AppCompatActivity {

String[] frutas = { "Ninguno", "Fresa", "Manzana",
"Uva", "Naranja", "Coco",
"Pera", "Banana", "Mandarina"};

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

Spinner spFrutas = (Spinner) findViewById (R.id.spinner);
// Defino el adaptador para el Spinner
ArrayAdapter<String> aa_paises = new ArrayAdapter<String>
(this, android.R.layout.simple_spinner_item, frutas);
// Asigno el adaptador al Spinner
spFrutas.setAdapter(aa_paises);
// Asigno el listener al Spinner
spFrutas.setOnItemSelectedListener(new ListaFrutas());
}

public class ListaFrutas implements AdapterView.OnItemSelectedListener {

// Metodo onItemSelected en el que indicamos lo que queremos hacer
// cuando sea seleccionado un elemento del Spinner
public void onItemSelected(AdapterView<?> parent,
View view, int pos, long id) {
TextView resultado = (TextView) findViewById (R.id.resultado);
// muestro en un TextView el nombre de alguna fruta seleccionada.
resultado.setText("Ha seleccionado: "+
parent.getItemIdAtPosition(pos));

}
public void onNothingSelected(AdapterView<?> parent) {
// Do nothing.
}
}
}

El resultado seria el siguiente:

A continuación les dejo el ejercicio para que lo descarguen desde aquí

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

WhatsApp chat