En este artículo te mostramos como crear un widget de un spinner cuyos elementos se definen en un archivo XML. Un widget de un spinner permite al usuario seleccionar un elemento de una lista de opciones. Al hacer clic en el widget del spinner mostrará un menú desplegable con todos los elementos disponibles. El usuario puede escoger uno de la lista.
El código
El ejemplo de código consta de los siguientes cuatro archivos: AndroidManifest.xml, main.xml, strings.xml y MainActivity.java.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.zetcode.finish"
android:versionCode="1"
android:versionName="1.0">
<application android:label="@string/app_name" android:icon="@drawable/ic_launcher">
<activity android:name="MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Este es el archivo AndroidManifest.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"
>
<Spinner
android:id="@+id/spn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:entries="@array/dlangs"
android:layout_marginTop="10dip"
android:prompt="@string/spn_title" />
<TextView
android:id="@+id/tvId"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dip"
/>
</LinearLayout>
El layout main.xml contiene un Spinner y un TextView. El atributo android:entries="@array/dlangs" define un recurso XML que provee un array de strings. Los string se escriben en el fichero strings.xml.
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Spinner</string>
<string name="spn_title">Choose a language</string>
<string-array name="dlangs">
<item>Python</item>
<item>PHP</item>
<item>Perl</item>
<item>Tcl</item>
<item>Ruby</item>
</string-array>
</resources>
En el fichero strings.xcml, tenemos los elementos del array de strings. Estos se muestran cuando hacemos click sobre el widget del spinner.
package com.zetcode.spinner; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.TextView; import android.widget.Spinner; import android.widget.AdapterView; import android.widget.AdapterView.OnItemSelectedListener; public class MainActivity extends Activity implements OnItemSelectedListener { private TextView tv; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); tv = (TextView) findViewById(R.id.tvId); Spinner spn = (Spinner) findViewById(R.id.spn); spn.setOnItemSelectedListener(this); } @Override public void onItemSelected(AdapterView<?> parent, View v, int pos, long id) { String item = parent.getItemAtPosition(pos).toString(); tv.setText(item); } @Override public void onNothingSelected(AdapterView<?> arg0) { tv.setText(""); } }
El item seleccionado del widget del spinner se muestra en el elwidget del TextView.
Spinner spn = (Spinner) findViewById(R.id.spn); spn.setOnItemSelectedListener(this);
Estas dos lines obtienen la referencia del widget del Spinner y establecen el OnItemSelectedListener para ello.
@Override public void onItemSelected(AdapterView<?> parent, View v, int pos, long id) { String item = parent.getItemAtPosition(pos).toString(); tv.setText(item); }
En el método onItemSelected(), obtenemos el item seleccionado actualmente del Spinner con el getItemAtPosition(). El item se transformará en un string y se establecerá en el TextView.