Diferencia entre revisiones de «Spinner a través de adaptador»

De MediaWiki
Ir a la navegación Ir a la búsqueda
 
(No se muestran 24 ediciones intermedias de 2 usuarios)
Línea 1: Línea 1:
−
==Introdución==
+
* [https://wiki.cifprodolfoucha.es/index.php?title=Spinner_con_Adaptadores Información movida a este enlace]
−
 
 
−
* Máis información en [https://developer.android.com/reference/android/widget/Spinner https://developer.android.com/reference/android/widget/Spinner]
 
−
 
 
−
<br />
 
−
*Xa vimos na unidade 2 como crear un [[Spinner]], pero o enlace dos datos co Spinner facíase a través dun atributo XML na definición do Spinner no Layout: '''android:entries'''.
 
−
*Agora imos facer o mesmo pero usando un adaptador.
 
−
*Colleremos os datos dende un array no código e logo dende un recurso XML.
 
−
 
 
−
 
 
−
* Se queremos cargar ditos recursos por programación:
 
−
 
 
−
:* Deberemos facer uso dun obxecto da [https://developer.android.com/reference/android/widget/ArrayAdapter?hl=es-419 clase ArrayAdapter]. Este obxecto serve coma ponte entre os datos e o spinner. A modificacións dos datos da lista sempre se fai no adaptador asociado á mesma e nunca sobre o spinner. Engadir, borrar, modificar, limpar,...todas esas operacións se teñen que facer sobre o adaptador.
 
−
:* Deberemos de obter os datos para encher o spinner. Estes datos poden vir dun array gardado en /res/ e para referencialo teremos que facer uso do [https://developer.android.com/reference/android/content/Context?hl=es-419#getResources() método getResources()].
 
−
:* Deberemos de establecer o aspecto (layout) que terá cada un dos 'views' que conforman cada elemento da lista (si, cada elemento da lista ten que ser un view :) )
 
−
:* Deberemos establecer o aspecto (layout) do spinner cando prememos na lista e se despregan todos os elementos.
 
−
 
 
−
 
 
−
* Para crear un ArrayAdapter podemos seguir este código:
 
−
<syntaxhighlight lang="java" line highlight="">
 
−
        Spinner lista = findViewById(R.id.id_spinner);
 
−
 
 
−
        ArrayAdapter<CharSequence>adaptador = ArrayAdapter.createFromResource(this,R.array.planetas_UD02_01_spinner,android.R.layout.simple_list_item_1);
 
−
        adaptador.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
 
−
        lista.setAdapter(adaptador);
 
−
</syntaxhighlight>
 
−
 
 
−
 
 
−
:* Na liña 3 creamos un ArrayAdapter facendo uso do [https://developer.android.com/reference/android/widget/ArrayAdapter?hl=es-419#createFromResource(android.content.Context,%20int,%20int) método createFromResource]. Dito método recibe como parámetros:
 
−
::* O contexto
 
−
::* Os datos do ArrayAdapter, que neste caso veñen dun recurso xa creado previamente [http://wiki.cifprodolfoucha.es/index.php?title=Spinner#Caso_pr.C3.A1ctico noutro exercicio].
 
−
::* O Layout que vai ter asociado cada view (elemento da lista, que dependendo do layout serán views como TextViews).
 
−
::: Os layout que se poden empregar se poden consultar en [http://wiki.cifprodolfoucha.es/index.php?title=Spinner#Caso_pr.C3.A1ctico http://wiki.cifprodolfoucha.es/index.php?title=Spinner#Caso_pr.C3.A1ctico]
 
−
::: O código fonte de cada layout se pode consultar en [https://github.com/aosp-mirror/platform_frameworks_base/tree/master/core/res/res/layout https://github.com/aosp-mirror/platform_frameworks_base/tree/master/core/res/res/layout]
 
−
 
 
−
 
 
−
:* Na liña 4, establecemos o layout que vai ter o spinner cando prememos sobre el e aparezan todos os elementos da lista. Podemos consultar [https://github.com/aosp-mirror/platform_frameworks_base/tree/master/core/res/res/layout o código fonte de dito layout].
 
−
 
 
−
:* Na liña 5 asociamos o ArrayAdapter ao Spinner.
 
−
 
 
−
 
 
−
 
 
−
 
 
−
 
 
−
<br />
 
−
* Podemos facer o mesmo desta outra forma:
 
−
:<syntaxhighlight lang="java" line highlight="">
 
−
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,getResources().getStringArray(R.array.planetas_UD02_01_spinner));
 
−
</syntaxhighlight>
 
−
 
 
−
: Para referenciar o array teríamos que facer uso da clase getResource() e obter o tipo correspondente (array).
 
−
 
 
−
 
 
−
* O ArrayAdapter está 'cheo' de métodos para engadir, borrar e modificar elementos da lista.
 
−
: Por exemplo:
 
−
:* [https://developer.android.com/reference/android/widget/ArrayAdapter.html#add(T) add(T object)]: Engade un elemento á lista de elementos.
 
−
:* [https://developer.android.com/reference/android/widget/ArrayAdapter.html#addAll(java.util.Collection%3C?%20extends%20T%3E) addAll(Collection<? extends T> collection)]: Engade unha colección.
 
−
:* [https://developer.android.com/reference/android/widget/ArrayAdapter.html#getCount() getCount()]: Devolve o número de elementos da lista.
 
−
:* [https://developer.android.com/reference/android/widget/ArrayAdapter.html#getItem(int) getItem(int position)]: Devolve o elemento da lista en base a súa posición (empeza en 0)
 
−
:* [https://developer.android.com/reference/android/widget/ArrayAdapter.html#insert(T,%20int) insert(T object, int index) ]: Engade un elemento na posición indicada.
 
−
:* [https://developer.android.com/reference/android/widget/ArrayAdapter.html#remove(T) remove(T object)]: Elimina un elemento da lista.
 
−
:* [https://developer.android.com/reference/android/widget/ArrayAdapter.html#clear() clear()]: Borra todos os elementos da lista.
 
−
 
 
−
* '''<u>Importante:</u>''' Calquera modificación que se faga sobre os elementos da lista facendo uso do adaptador, leva consigo a 'obriga' de informar ao view dos cambios para que os reflicta. Isto se consigo chamando ao [https://developer.android.com/reference/android/widget/ArrayAdapter.html#setNotifyOnChange(boolean) método setNotifyOnChange(boolean notifyOnChange)], cun valor true no parámetro.
 
−
 
 
−
 
 
−
 
 
−
* Por exemplo, o código anterior se podería cambiar por:
 
−
:<syntaxhighlight lang="java" line highlight="">
 
−
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item);
 
−
adapter.addAll(getResources().getStringArray(R.array.planetas_UD02_01_spinner));
 
−
adapter.setNotifyOnChange(true);
 
−
</syntaxhighlight>
 
−
 
 
−
 
 
−
 
 
−
<br />
 
−
* A xestión de eventos neste control inclúe a interface que controla cando un elemento da lista é premido. É a [https://developer.android.com/reference/android/widget/AdapterView.OnItemSelectedListener interface OnItemSelectedListener] e se rexistra có [https://developer.android.com/reference/android/widget/AdapterView.html#setOnItemSelectedListener(android.widget.AdapterView.OnItemSelectedListener) método setOnItemClickListener (AdapterView.OnItemClickListener l)] do Spinner.
 
−
: Ao facelo, deberá implementarse estes dous método:
 
−
:<syntaxhighlight lang="java" line highlight="">
 
−
            @Override
 
−
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
 
−
 
 
−
            }
 
−
 
 
−
            @Override
 
−
            public void onNothingSelected(AdapterView<?> parent) {
 
−
 
 
−
            }
 
−
 
 
−
</syntaxhighlight>
 
−
 
 
−
:: O segundo método se chama cando non se selecciona ningún elemento e desaparece a lista.
 
−
:: O primeiro cando se selecciona un elemento da lista.
 
−
:: Leva como parámetros:
 
−
::* O adaptador asociado á lista.
 
−
::* O view que foi seleccionado (lembrar que cando se crea o adaptador se establece un layout para cada compoñente da lista)
 
−
::* A posición do elemento seleccionado na lista (empeza en 0)
 
−
::* Un identificador para a fila que foi seleccionada.
 
−
 
 
−
==Caso práctico==
 
−
 
 
−
* Partimos que xa temos creado o proxecto inicial como [http://wiki.cifprodolfoucha.es/index.php?title=PDM_Creando_proxecto_base xa indicamos anteriormente].
 
−
: Se non o temos creado antes, crea un paquete de nome '''UI''' como un subpaquete do teu paquete principal.
 
−
: Dentro do paquete UI, crearemos un novo paquete de nome: '''Spinners'''.
 
−
 
 
−
 
 
−
<br />
 
−
* Dentro do paquete '''Spinners''' crear unha nova 'Empty Activity' de nome: '''UD02_02_Spinners''' de tipo Launcher e sen compatibilidade.
 
−
: Modifica o arquivo '''AndroidManifiest.xml''' e engade unha label á activity como [http://wiki.cifprodolfoucha.es/index.php?title=PDM_Creando_proxecto_base xa vimos na creación do proxecto base].
 
−
 
 
−
 
−
<br />
 
−
 
 
−
 
 
−
<gallery caption="Spinner cun Adapter" widths="350" heights="300px" perrow="2">
 
−
Image:PDM_adaptador_2.jpg
 
−
Image:PDM_adaptador_2.jpg
 
−
</gallery>
 
−
 
 
−
*Cada ítem do Spinner é tratado como unha '''View''', neste caso de tipo '''TextView'''.
 
−
 
 
−
===O XML do layout===
 
−
*Observar como a vista Spinner non ten a entrada '''android:entries'''.
 
−
 
 
−
<syntaxhighlight lang="java" line enclose="div" highlight="" >
 
−
<?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=".UI.Spinners.UD02_02_Spinners">
 
−
 
 
−
    <Spinner
 
−
        android:id="@+id/spnLista_UD02_02_spinner"
 
−
        android:layout_width="0dp"
 
−
        android:layout_height="wrap_content"
 
−
        android:layout_marginEnd="8dp"
 
−
        android:layout_marginStart="8dp"
 
−
        android:layout_marginTop="8dp"
 
−
        android:dropDownWidth="match_parent"
 
−
        app:layout_constraintEnd_toEndOf="parent"
 
−
        app:layout_constraintStart_toStartOf="parent"
 
−
        app:layout_constraintTop_toTopOf="parent" />
 
−
</android.support.constraint.ConstraintLayout>
 
−
</syntaxhighlight>
 
−
 
 
−
 
 
−
* Partimos do exercicio de spinner feito anteriormente, no que está definido un array de datos, nun arquivo de /res/values:
 
−
<syntaxhighlight lang="xml" line enclose="div" highlight="" >
 
−
<?xml version="1.0" encoding="utf-8"?>
 
−
<resources>
 
−
 
 
−
    <string-array name="planetas_UD02_01_spinner">
 
−
        <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>
 
−
</syntaxhighlight>
 
−
 
 
−
 
 
−
 
 
−
* O código da Activity:
 
−
<syntaxhighlight lang="java" line enclose="div" highlight="20-22,24-30" >
 
−
package es.cursoandroid.cifprodolfoucha.aprendiendo.UI.Spinners;
 
−
 
 
−
import android.app.Activity;
 
−
import android.os.Bundle;
 
−
import android.view.View;
 
−
import android.widget.AdapterView;
 
−
import android.widget.ArrayAdapter;
 
−
import android.widget.Spinner;
 
−
import android.widget.TextView;
 
−
import android.widget.Toast;
 
−
 
 
−
import es.cursoandroid.cifprodolfoucha.aprendiendo.R;
 
−
 
 
−
public class UD02_02_Spinners extends Activity {
 
−
 
 
−
    private void cargarLista() {
 
−
 
 
−
        Spinner lista = findViewById(R.id.spnLista_UD02_02_spinner);
 
−
 
 
−
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1);
 
−
        adapter.addAll(getResources().getStringArray(R.array.planetas_UD02_01_spinner));
 
−
        lista.setAdapter(adapter);
 
−
 
 
−
        lista.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
 
−
            @Override
 
−
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
 
−
                //String datoLista = (String)parent.getItemAtPosition(position);    // Poderíamos obter o dato desta forma (fixarse no Cast)
 
−
                String datoLista = ((TextView) view).getText().toString();          // ou desta outra forma
 
−
                Toast.makeText(getApplicationContext(),"Elemento seleccionado:" + datoLista + " na posición "+ String.valueOf(position),Toast.LENGTH_LONG).show();
 
−
            }
 
−
 
 
−
            @Override
 
−
            public void onNothingSelected(AdapterView<?> parent) {
 
−
 
 
−
            }
 
−
        });
 
−
 
 
−
    }
 
−
    @Override
 
−
    protected void onCreate(Bundle savedInstanceState) {
 
−
        super.onCreate(savedInstanceState);
 
−
        setContentView(R.layout.activity_ud02_02__spinners);
 
−
 
 
−
        cargarLista();
 
−
 
 
−
    }
 
−
}
 
−
 
 
−
</syntaxhighlight>
 
−
 
 
−
:* Liñas 20-22: Usamos unha das formas vistas para crear o adaptador e asocialo ao spinner.
 
−
:* Liña 24: Rexistramos a interface que xestiona o evento de selección dun elemento da lista.
 
−
:* Liñas 26-30: Facemos uso do método onItemSelected() e os seus parámetros para obter o dato da lista seleccionado.
 
−
 
 
−
==Usando un array estático en Java==
 
−
*Ao final do código explícase como se enlaza a fonte de datos co adaptador e este co spinner.
 
−
*Observar as liñas marcadas.
 
−
 
−
<syntaxhighlight lang="java" line enclose="div" highlight="23,26,29,32,35,38,39" >
 
−
package com.example.u4_02_spinneradapter;
 
−
 
 
−
import android.app.Activity;
 
−
import android.os.Bundle;
 
−
import android.view.Menu;
 
−
import android.view.View;
 
−
import android.widget.TextView;
 
−
import android.widget.AdapterView;
 
−
import android.widget.AdapterView.OnItemSelectedListener;
 
−
import android.widget.ArrayAdapter;
 
−
import android.widget.Spinner;
 
−
import android.widget.Toast;
 
−
 
 
−
public class U4_02_SpinnerAdapter extends Activity {
 
−
 
 
−
@Override
 
−
protected void onCreate(Bundle savedInstanceState) {
 
−
super.onCreate(savedInstanceState);
 
−
setContentView(R.layout.activity_u4_02__spinner_adapter);
 
−
 
 
−
Spinner spinFroitas = (Spinner) findViewById(R.id.spin_froitas);
 
−
 
 
−
// Fonte de datos
 
−
String[] froitas = new String[] { "Pera", "Mazá", "Plátano" };
 
−
 
 
−
// Enlace do adaptador cos datos
 
−
ArrayAdapter<String> adaptador = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, froitas);
 
−
 
 
−
// Opcional: layout usuado para representar os datos no Spinner
 
−
adaptador.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
 
−
 
 
−
// Enlace do adaptador co Spinner do Layout.
 
−
spinFroitas.setAdapter(adaptador);
 
−
 
 
−
// Escoitador
 
−
spinFroitas.setOnItemSelectedListener(new OnItemSelectedListener() {
 
−
@Override
 
−
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
 
−
                //Toast.makeText(getBaseContext(), "Seleccionaches: " + parent.getItemAtPosition(pos), Toast.LENGTH_LONG).show();
 
−
Toast.makeText(getBaseContext(), "Seleccionaches: " + ((TextView) view).getText(), Toast.LENGTH_LONG).show();
 
−
 
 
−
}
 
−
 
 
−
@Override
 
−
public void onNothingSelected(AdapterView<?> arg0) {
 
−
// TODO Auto-generated method stub
 
−
}
 
−
}); // Fin da clase anónima
 
−
 
 
−
}
 
−
 
 
−
@Override
 
−
public boolean onCreateOptionsMenu(Menu menu) {
 
−
// Inflate the menu; this adds items to the action bar if it is present.
 
−
getMenuInflater().inflate(R.menu.u4_02__spinner_adapter, menu);
 
−
return true;
 
−
}
 
−
 
 
−
}
 
−
 
 
−
</syntaxhighlight>
 
−
*'''Liña 23''': Definimos a fonte de datos, neste caso un array estático.
 
−
*'''Liña 26''': Definimos o adaptador de tipo ArrayAdapter. Pasámoslle como parámetros:
 
−
**Contexto,
 
−
**O int, identificador de recurso de layout que se vai usar para representar a Vista de Selección, neste caso usamos un predefinido. O usuario pode experimentar con outros tipos (android.R.layout.... CTRL+ESPAZO) e ver que outras formas hai de presentar os datos nun Spinner.
 
−
**Un array de obxectos, neste caso de Strings.
 
−
**Para ver outros construtores e métodos: http://developer.android.com/reference/android/widget/ArrayAdapter.html
 
−
*'''Liña 29''': ''setDropDownViewResource(int)'', indica como se vai representar cada un dos ítems do Spinner. Usamos un layout xa predefinido. O usuario pode experimentar usando outros distintos, predefinidos ou propios.
 
−
*'''Liña 32''': establece o adaptador que subministra os datos ao Spinner.
 
−
*'''Liña 35''': O escoitador é o mesmo que cando non se usaba un adaptador.
 
−
*'''Liñas 38,39''': As dúas liñas fan o mesmo, pero no segundo caso observar como recollemos a vista (view) que nos devolve o evento ao premer nun ítem do Spinner. Esa view é do tipo TextView e por iso facemos un cast e logo xa lle podemos aplicar métodos da clase TextView, como getText().
 
−
 
 
−
==Usando un array de recursos XML==
 
−
*Usamos o mesmo Layout do exemplo anterior e case o mesmo código, só comentamos a liña de asociación do adaptador coa fonte de datos e engadimos outra sentencia que asocie o adaptador co ficheiro XML.
 
−
 
 
−
===Ficheiro XML para o array===
 
−
*En '''res/values/array_froitas.xml'''
 
−
*Observar o nome do recurso array: ''froitas''
 
−
<syntaxhighlight lang="xml" line enclose="div" highlight="4" >
 
−
<?xml version="1.0" encoding="utf-8"?>
 
−
<resources>
 
−
 
 
−
    <string-array name="froitas">
 
−
        <item>Pera</item>
 
−
        <item>Mazá</item>
 
−
        <item>Plátano</item>
 
−
    </string-array>
 
−
 
 
−
</resources>
 
−
</syntaxhighlight>
 
−
 
 
−
 
 
−
===O código Java do programa===
 
−
<syntaxhighlight lang="java" line enclose="div" highlight="26,28" >
 
−
package com.example.u4_02_spinneradapter;
 
−
 
 
−
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.ArrayAdapter;
 
−
import android.widget.Spinner;
 
−
import android.widget.Toast;
 
−
 
 
−
public class U4_02_SpinnerAdapter extends Activity {
 
−
 
 
−
@Override
 
−
protected void onCreate(Bundle savedInstanceState) {
 
−
super.onCreate(savedInstanceState);
 
−
setContentView(R.layout.activity_u4_02__spinner_adapter);
 
−
 
 
−
Spinner spinFroitas = (Spinner) findViewById(R.id.spin_froitas);
 
−
 
 
−
// Fonte de datos. Neste caso obtense dun recurso xml.
 
−
//String[] froitas = new String[] { "Pera", "Mazá", "Plátano" };
 
−
 
 
−
// Enlace do adaptador cos datos
 
−
// ArrayAdapter<String> adaptador = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, froitas);
 
−
 
 
−
ArrayAdapter<CharSequence> adaptador = ArrayAdapter.createFromResource(this, R.array.froitas, android.R.layout.simple_spinner_item);
 
−
 
 
−
// Opcional: layout usuado para representar os datos no Spinner
 
−
adaptador.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
 
−
 
 
−
// Enlace do adaptador co Spinner do Layout.
 
−
spinFroitas.setAdapter(adaptador);
 
−
 
 
−
// Escoitador
 
−
spinFroitas.setOnItemSelectedListener(new OnItemSelectedListener() {
 
−
@Override
 
−
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
 
−
                //Toast.makeText(getBaseContext(), "Seleccionaches: " + parent.getItemAtPosition(pos), Toast.LENGTH_LONG).show();
 
−
Toast.makeText(getBaseContext(), "Seleccionaches: " + ((TextView) view).getText(), Toast.LENGTH_LONG).show();
 
−
 
 
−
}
 
−
 
 
−
@Override
 
−
public void onNothingSelected(AdapterView<?> arg0) {
 
−
// TODO Auto-generated method stub
 
−
}
 
−
}); // Fin da clase anónima
 
−
 
 
−
}
 
−
 
 
−
@Override
 
−
public boolean onCreateOptionsMenu(Menu menu) {
 
−
// Inflate the menu; this adds items to the action bar if it is present.
 
−
getMenuInflater().inflate(R.menu.u4_02__spinner_adapter, menu);
 
−
return true;
 
−
}
 
−
 
 
−
}
 
−
</syntaxhighlight>
 
−
*'''Liña 26''': Comentamos o anterior construtor e ...
 
−
*'''Liña 28''': usamos outro método que nos permita ler un recurso XML: ''createFromResource(this, R.array.froitas, android.R.layout.simple_spinner_item)''
 
−
**Contexto,
 
−
**Nome do recurso array que contén os ítems,
 
−
**O int, identificador de recurso de layout que se vai usar para representar a Vista de Selección, neste caso usamos un predefinido. O usuario pode experimentar con outros tipos (android.R.layout.... CTRL+ESPAZO) e ver que outras formas hai de presentar os datos nun Spinner.
 
−
**Para ver outros construtores e métodos: http://developer.android.com/reference/android/widget/ArrayAdapter.html
 
−
**No canto de facer cambiar de método puidemos usar o construtor que usamos no primeiro caso:
 
−
*** Pero antes recollemos o array XML nun array de Strings de datos: '''String[] froitas = getResources().getStringArray(R.array.froitas);'''
 
−
*O resto non varía.
 
−
 
 
−
==Uso dun array dinámico==
 
−
*Nos dous casos anteriores o contido do Spinner é estático e defínese en tempo de compilación, non de execución.
 
−
*Se usamos arrays dinámicos podemos crear a fonte de datos en tempo de execución antes de pasarlla ao adaptador.
 
−
*Así imos poder usar datos de ficheiros, bases de datos, etc e crear unha fonte de datos para un Spinner en tempo de execución.
 
−
 
 
−
<syntaxhighlight lang="java" line enclose="div" highlight="26,28,30-32" >
 
−
 
 
−
package com.example.u4_02_spinneradapter;
 
−
 
 
−
import java.util.ArrayList;
 
−
import android.R.string;
 
−
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.ArrayAdapter;
 
−
import android.widget.Spinner;
 
−
import android.widget.Toast;
 
−
 
 
−
 
 
−
public class U4_02_SpinnerAdapter extends Activity {
 
−
 
 
−
@Override
 
−
protected void onCreate(Bundle savedInstanceState) {
 
−
super.onCreate(savedInstanceState);
 
−
setContentView(R.layout.activity_u4_02__spinner_adapter);
 
−
 
 
−
Spinner spinFroitas = (Spinner) findViewById(R.id.spin_froitas);
 
−
 
 
−
// Fonte de datos
 
−
// String[] froitas = new String[] { "Pera", "Mazá", "Plátano" };
 
−
 
 
−
ArrayList<String> froitas = new ArrayList<String>();
 
−
 
 
−
froitas.add("Pera");
 
−
froitas.add("Mazá");
 
−
froitas.add("Plátano");
 
−
 
 
−
// Enlace do adaptador cos datos
 
−
ArrayAdapter<String> adaptador = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, froitas);
 
−
 
 
−
// Opcional: layout usuado para representar os datos no Spinner
 
−
adaptador.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
 
−
 
 
−
// Enlace do adaptador co Spinner do Layout.
 
−
spinFroitas.setAdapter(adaptador);
 
−
 
 
−
// Escoitador
 
−
spinFroitas.setOnItemSelectedListener(new OnItemSelectedListener() {
 
−
@Override
 
−
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
 
−
                //Toast.makeText(getBaseContext(), "Seleccionaches: " + parent.getItemAtPosition(pos), Toast.LENGTH_LONG).show();
 
−
Toast.makeText(getBaseContext(), "Seleccionaches: " + ((TextView) view).getText(), Toast.LENGTH_LONG).show();
 
−
}
 
−
 
 
−
@Override
 
−
public void onNothingSelected(AdapterView<?> arg0) {
 
−
// TODO Auto-generated method stub
 
−
}
 
−
}); // Fin da clase anónima
 
−
 
 
−
}
 
−
 
 
−
private String[] getStringArray(int froitas) {
 
−
// TODO Auto-generated method stub
 
−
return null;
 
−
}
 
−
 
 
−
@Override
 
−
public boolean onCreateOptionsMenu(Menu menu) {
 
−
// Inflate the menu; this adds items to the action bar if it is present.
 
−
getMenuInflater().inflate(R.menu.u4_02__spinner_adapter, menu);
 
−
return true;
 
−
}
 
−
 
 
−
}
 
−
 
 
−
</syntaxhighlight >
 
−
 
 
−
*'''Liñas 23-28''': Neste caso os elementos do array engádense en tempo de execución ao array '''froitas''', que neste caso e do tipo '''ArrayList'''. 
 
−
*O resto é exactamente igual.
 
−
 
 
−
 
 
−
 
 
−
<br> -- [[Usuario:angelfg|Ángel D. Fernández González]] e [[Usuario:Carrion|Carlos Carrión Álvarez]] -- (2015).
 

Revisión actual del 11:53 21 nov 2020