Spinner

De Manuais Informática - IES San Clemente.
Revisión del 09:08 28 jul 2015 de Angelfg (discusión | contribs.)
(difs.) ← Revisión anterior | Revisión actual (difs.) | Revisión siguiente → (difs.)
Ir a la navegación Ir a la búsqueda

Introdución

  • Un Spinner é unha lista despregable de opcións na que o usuario pode escoller unha delas.

00 spinners form.png


  • Imos comezar usando o Spinner apoiándonos primeiro nun botón de texto.


  • Unha forma estática de definir os datos que van encher o Spinner é usando un arquivo de recursos de tipo String-array:


Caso práctico

  • Crear o proxecto U2_12_Spinner
  • Nunha primeira versión imos crear unha aplicación que permita seleccionar un planeta nun Spiner e logo premendo un botón nos indicará o ítem seleccionado e a súa posición.


Arquivo de recursos: String-Array


  • Ficheiro de recursos: array_planetas.xml.
  • Polo nome do string_array é por onde se vai acceder ao array.
<?xml version="1.0" encoding="utf-8"?>
<resources>
     <string-array name="planetas">
        <item>Mercurio</item>
        <item>Venus</item>
        <item>Terra</item>
        <item>Marte</item>
        <item>Xúpiter</item>
        <item>Saturno</item>
        <item>Urano</item>
        <item>Neptuno</item>
    </string-array>
</resources>


XML do Layout

  • Observar como se crea un Spinner
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <Spinner
        android:id="@+id/spin_planetas"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:entries="@array/planetas" />

    <Button
        android:id="@+id/btn_seleccion"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="onButtonClick"
        android:text="Preme cando selecciones" />

    <TextView
        android:id="@+id/lbl_resultado"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Selecciona un planeta" />

</LinearLayout>
  • Liña 11: é onde se vincula o Spinner co recurso tipo array: planetas.
  • Liña 17: chamamos a un método cando se faga Click.


Código Java

package com.example.u2_12_spinner;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.Spinner;
import android.widget.TextView;

public class U2_12_Spinner extends Activity {

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

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.u2_12__spinner, menu);
		return true;
	}

	public void onButtonClick(View v) {
		Spinner spinPlanetas = (Spinner) findViewById(R.id.spin_planetas);
		TextView lblResultado = (TextView) findViewById(R.id.lbl_resultado);

		lblResultado.setText("Seleccionaches "
					+ spinPlanetas.getSelectedItem() 
					+ "\nque está na posición " + spinPlanetas.getSelectedItemId());
	}

}
  • Liñas 26,27: Definimos os obxectos nos que recollemos os controis declarados no Layout.
  • Liñas 31,32: seleccionamos o elemento da lista e a súa posición.

Capturar o evento cando se selecciona un ítem

  • Nesta segunda versión vaise deixar que o botón siga realizando a súa función, pero agora cando seleccionemos un ítem que se capture o evento e que na etiqueta indicar cal é o planeta seleccionado e a súa posición.
package com.example.u2_12_spinner;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.Spinner;
import android.widget.TextView;

public class U2_12_Spinner extends Activity {

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

		Spinner spinPlanetas = (Spinner) findViewById(R.id.spin_planetas);

		spinPlanetas.setOnItemSelectedListener(new OnItemSelectedListener() {

			@Override
			public void onItemSelected(AdapterView<?> parent, View view,
					int pos, long id) {
				// TODO Auto-generated method stub

				TextView lblResultado = (TextView) findViewById(R.id.lbl_resultado);

				lblResultado.setText("Seleccionaches "
						+ parent.getItemAtPosition(pos)
						+ "\nque está na posición " + pos);

			}

			@Override
			public void onNothingSelected(AdapterView<?> arg0) {
				// TODO Auto-generated method stub

			}
		});
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.u2_12__spinner, menu);
		return true;
	}

	public void onButtonClick(View v) {
		Spinner spinPlanetas = (Spinner) findViewById(R.id.spin_planetas);
		TextView lblResultado = (TextView) findViewById(R.id.lbl_resultado);

		lblResultado.setText("Seleccionaches " + spinPlanetas.getSelectedItem()
				+ "\nque está na posición " + spinPlanetas.getSelectedItemId());
	}

}
  • Liña 21: Listener que se chama cando se selecciona un elemento do Spinner
  • Liña 24: O métod onItemSelected(AdapterView<?> parent, View view, int pos, long id) é chamado cando se selecciona un item distinto do xa seleccionado.
  • Parámetros:
    • parent: O elemento (AdapterView) onde se fixo a selección.
    • view: A vista que foi selecionada dentro do AdapterView
    • position: A posición da vista dentro do Adaptador.
    • id: Cada ítem pode ter varias filas (neste caso só ten unha) este campo indicaría a fila dentro do ítem





-- Ángel D. Fernández González e Carlos Carrión Álvarez -- (2015).