Dos Spinner enlazado y funcionando pero con dudas

518 views
Skip to first unread message

luisdm80

unread,
Nov 10, 2010, 7:08:51 AM11/10/10
to desarrolladores-android
Hola a todo el Mundo, estoy empezando en el mundillo de android para
mi proyecto fin de carrera.

Tengo una aplicación con dos spinner enlazados, que me funciona bien,
pero el problema lo tengo a la hora de ampliar los item que tiene cada
spinner.

Codigo del MainActivity:

package com.fast;
import android.app.Activity;
import android.os.Bundle;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.SpinnerAdapter;


public class MainActivity extends Activity {

protected String mSelection;
protected String mSelection2;
protected ArrayAdapter<CharSequence> adaptador;
protected ArrayAdapter<CharSequence> mAdapter2;
protected ArrayAdapter<CharSequence> mAdapter3;
protected ArrayAdapter<CharSequence> mAdapter4;
protected ArrayAdapter<CharSequence> mAdapter5;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);


this.adaptador = ArrayAdapter.createFromResource(this,
R.array.Ciudad,
android.R.layout.simple_spinner_item);
this.mAdapter2 = ArrayAdapter.createFromResource(this,
R.array.Madrid,
android.R.layout.simple_spinner_item);
this.mAdapter3 = ArrayAdapter.createFromResource(this,
R.array.Barcelona,
android.R.layout.simple_spinner_item);
this.mAdapter4 = ArrayAdapter.createFromResource(this,
R.array.Sevilla,
android.R.layout.simple_spinner_item);
this.mAdapter5 = ArrayAdapter.createFromResource(this,
R.array.Valencia,
android.R.layout.simple_spinner_item);

final SpinnerAdapter[] mAdapter = new SpinnerAdapter[]
{mAdapter2, mAdapter3, mAdapter4, mAdapter5};



final Spinner spinner1 = (Spinner)findViewById(R.id.Spinner01);
final Spinner spinner2 = (Spinner)findViewById(R.id.Spinner02);


adaptador.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);


mAdapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);


mAdapter3.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);


mAdapter4.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);


mAdapter5.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

spinner1.setAdapter(adaptador);

spinner1.setOnItemSelectedListener(new
AdapterView.OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> parent,
android.view.View v, int position, long id) {
MainActivity.this.mSelection =
parent.getItemAtPosition(position).toString();
TextView resultText = (TextView)findViewById(R.id.texto1);
resultText.setText("Seleccionado: " +
MainActivity.this.mSelection);
spinner2.setAdapter(mAdapter[position]);
spinner2.setOnItemSelectedListener(new
AdapterView.OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> parent,
android.view.View v, int position2, long id) {

MainActivity.this.mSelection2 =
parent.getItemAtPosition(position2).toString();
TextView resultText1 =
(TextView)findViewById(R.id.texto2);
resultText1.setText("Selecionados: " +
MainActivity.this.mSelection +", "
+ MainActivity.this.mSelection2);
}
public void onNothingSelected(AdapterView<?> parent) {
}
});
}
public void onNothingSelected(AdapterView<?> parent) {
}
});
}}


Bueno explico un poco, el Array "Ciudad" está compuesto por: Madrid,
Barcelona, Sevilla y Valencia, para que funcione he tenido que poner
adaptadores a cada uno de ellos y aquí es donde está mi problema,
porque si yo quiero poner en mi primer spinner muchos más elementos,
tendría que ir poniendo más adaptadores y seguro que existe alguna
forma más sencilla de ponerlo, decir que llevo programando en android
y en java muy muy poco, si alguien me puede guiar en cómo mejorar el
código se lo agradecería.

Un saludo y gracias

Por si alguien lo necesita pongo el codigo del Main.xml y del
strings.xml

Codigo Main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/
android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
android:id="@+id/texto1"
android:layout_margin="5sp"/>
<Spinner android:id="@+id/Spinner01"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<Spinner android:id="@+id/Spinner02"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
android:id="@+id/texto2"
android:layout_margin="5sp"
android:textSize="20sp"
android:textStyle="bold"/>
</LinearLayout>


Codigo Strings.xml:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<resources>
<string name="hello">Hello World</string>
<string name="app_name">Sat Finder</string>
<string-array name="Ciudad">

<item>Madrid</item>
<item>Barcelona</item>
<item>Sevilla</item>
<item>Valencia</item>

</string-array>

<string-array name="Madrid">

<item>Mad1</item>
<item>Mad2</item>
<item>Mad3</item>
<item>Mad4</item>
<item>Mad5</item>

</string-array>

<string-array name="Barcelona">

<item>Bar1</item>
<item>Bar2</item>
<item>Bar3</item>
<item>Bar4</item>
<item>Bar5</item>


</string-array>

<string-array name="Sevilla">

<item>Sev1</item>
<item>Sev2</item>
<item>Sev3</item>
<item>Sev4</item>
<item>Sev5</item>

</string-array>
<string-array name="Valencia">

<item>Val1</item>
<item>Val2</item>
<item>Val3</item>
<item>Val4</item>
<item>Val5</item>


</string-array>

</resources>

Ramón Invarato

unread,
Nov 10, 2010, 1:24:40 PM11/10/10
to desarrollad...@googlegroups.com
Si el problema es de introducirle más items para seleccionar, prueba a introducir más campos en lo que tienes en (esto es de manera estática):
   <string-array name="Madrid">

   <item>Mad1</item>
   <item>Mad2</item>
   <item>Mad3</item>
   <item>Mad4</item>
   <item>Mad5</item>
   <item>Mad6</item>
   <item>Mad7</item>
etc..........
   </string-array>

Si lo que quieres es ampliarlos de manera dinámica, crea un array vulgar y corriente de toda la vida de java, y úsalo en vez de del array estático.


--
Has recibido este mensaje porque estás suscrito al grupo "desarrolladores-android" de Grupos de Google.
Para publicar una entrada en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a desarrolladores-a...@googlegroups.com
Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/desarrolladores-android?hl=es.


luisdm80

unread,
Nov 11, 2010, 4:38:18 AM11/11/10
to desarrolladores-android
Hola gracias por contestar, pero el array (java) lo puedo poner en el
archivo xml, porque lo he intentado y no lo he conseguido o no he
sabido, que puede ser.

En Android-Spa me han comentado que para evitarme los adaptadores,
llame a un método, el cual compare todos los elementos de mi primer
spinner con if y elseif, la cosa es que quiero poner al primer array
unos 70 elementos y si alguien conoce alguna forma mejor que el if y
elseif se lo agradecería.

Un saludo y gracias


On 10 nov, 19:24, Ramón Invarato <invar...@gmail.com> wrote:
> Si el problema es de introducirle más items para seleccionar, prueba a
> introducir más campos en lo que tienes en (esto es de manera estática):
>    <string-array name="Madrid">
>
>    <item>Mad1</item>
>    <item>Mad2</item>
>    <item>Mad3</item>
>    <item>Mad4</item>
>    <item>Mad5</item>
>    <item>Mad6</item>
>    <item>Mad7</item>
> etc..........
>    </string-array>
>
> Si lo que quieres es ampliarlos de manera dinámica, crea un array vulgar y
> corriente de toda la vida de java, y úsalo en vez de del array estático.
>
> > desarrolladores-a...@googlegroups.com<desarrolladores-android%2Bunsu...@googlegroups.com>

Ramón Invarato

unread,
Nov 11, 2010, 6:18:19 AM11/11/10
to desarrollad...@googlegroups.com
El array de java NO lo tienes que meter en el XML (XML no reconoce java).

Desde java (sea una clase ".java" que estés implementando), prueba  a crear un array con las siguientes líneas de código:
     String [] Array_de_string = {"Mad1", "Mad2", "mad3"};
     ArrayAdapter<CharSequence> adaptadorParaSpinner = ArrayAdapter<CharSequence> (contexto, android.R.layout.simple_dropdown_item_1line, Array_de_string);

Después solo tendrás que usar el adaptador (llamado en el ejemplo adaptadorParaSpinner) que se ha creado para insertarlo en el Spinner, en el lugar del adapter creado desde xml (pero sin usar xml para nada), y que se muestre el array de string que se ha declarado en la lista de selección del Spinner. 

luisdm80

unread,
Nov 11, 2010, 1:53:03 PM11/11/10
to desarrolladores-android
Gracias de nuevo.

Entiendo lo que me quieres decir, pero sigo en las mismas de tener que
poner 70 arrayadapter, uno por cada elemento de mi primer spinner no?
yo estaba preguntando por si puedo reducir el codigo del mainActivity
y no tener que ir poniendo un arrayAdapter por cada uno.

un saludo.

On 11 nov, 12:18, Ramón Invarato <invar...@gmail.com> wrote:
> El array de java NO lo tienes que meter en el XML (XML no reconoce java).
>
> Desde java (sea una clase ".java" que estés implementando), prueba  a crear
> un array con las siguientes líneas de código:
>      *String [] Array_de_string = {"Mad1", "Mad2", "mad3"};*
> *     ArrayAdapter<CharSequence> adaptadorParaSpinner
> = ArrayAdapter<CharSequence>
> (contexto, android.R.layout.simple_dropdown_item_1line, Array_de_string);*
>
> Después solo tendrás que usar el adaptador (llamado en el ejemplo *
> adaptadorParaSpinner*) que se ha creado para insertarlo en el Spinner, en el
> lugar del adapter creado desde xml (pero sin usar xml para nada), y que se
> muestre el array de string que se ha declarado en la lista de selección del
> Spinner.
>
> ...
>
> leer más »

Ramón Invarato

unread,
Nov 11, 2010, 3:59:48 PM11/11/10
to desarrollad...@googlegroups.com
No se si has entendido bien el uso de los adaptadores. Solo se usa un array adapter para cada spinner. Un array adapter es un array adaptado para que se muestren sus registros en el spinner, y cada registro es un elemento selecionable del spinner.

Al menos que tengas que poner un montón de spinner no creo que necesites crear muchos adapter. Aún así, con un poco de ingenio, puedes usar una función que te englobe la creación de los adapter y los spinner, para spinner repetitivos. Así pasarle únicamente los arrays de string.
 

Reply all
Reply to author
Forward
0 new messages