AutoCompleteTextView

Supongamos que quieres un EditText pero un poco más sofisticado, con sugerencias. Esto es, que según escribes en el EditText te vaya sugiriendo posibilidades que concuerden con lo que vas metiendo. Bueno, pues eso es AutoCompleteTextView. Crear uno es bastante fácil, pero es un widget que tiene su miga.

AutoCompleteTextView se describe en multitud de sitios. Pero pocos te hablan de que tiene un bug por culpa del cual, dependiendo del tema que uses, las sugerencias te salen de color blanco sobre blanco: o sea, no se lee nada. Nosotros vamos a obviarlo especificando nuestra propia plantilla, que es lo primero que vamos a hacer. Hala, crea un fichero XML en layout al que llamaremos item_simple.xml.

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
      android:id="@android:id/text1"
      style="?android:attr/spinnerDropDownItemStyle"
      android:singleLine="true"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:minHeight="40dip"
      android:ellipsize="marquee"
      android:textColor="#222222" />

Vale, ahora necesitas definir tres cosas:

private AutoCompleteTextView editGermen;
ArrayAdapter<String> adaptadorGermen;
String[] germenes;

Lo primero de todo, vamos a rellenar el array de Strings al que hemos llamado germenes, y que es el que alimentará las sugerencias. Por ejemplo, si estamos usando una base de datos SQLite, podemos cargar todos los gérmenes que hayamos introducido en ella. Lo más práctico es llamar a una subrutina desde el onCreate, por ejemplo:

public void rellenaGermenes() {
pacientesdb=new PacientesSQLiteHelper(getActivity(), "Pacientes", null, global.dimeVersionDB());
db=pacientesdb.getReadableDatabase();
String consultaDBInterna="select distinct germen from germenes order by germen";
Cursor c=db.rawQuery(consultaDBInterna, null);
int nGermenes=c.getCount();
germenes=new String[nGermenes];
int x=0;
if (c.moveToFirst()) {
do {
germenes[x]=c.getString(0);
x++;
} while (c.moveToNext());
}
db.close();
pacientesdb.close();
}

Vale, ahora llamamos a esta rutina desde el onCreate, y a continuación definimos el AutoCompleteView, el adaptador (especificando nuestro XML), y los ponemos en contacto:

editGermen=(AutoCompleteTextView) vista.findViewById(R.id.editGermen);
adaptadorGermen=new ArrayAdapter<String>(this, R.layout.item_simple, germenes);
editGermen.setThreshold(3);
editGermen.setAdapter(adaptadorGermen);
Be Sociable, Share!

Puedes seguir cualquier respuesta a esta entrada mediante el canal RSS 2.0. Puedes dejar un comentario o enviar un trackback desde tu propio sitio.

Deja un comentario

Disculpa, debes iniciar sesión para escribir un comentario.