Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Among 1
Among 1
En Android, una lista representa un conjunto de elementos que se muestran los unos a continuación
de los otros.
Cada elemento de una lista puede tener de una a tres filas y cada fila puede personalizarse con
diferentes componentes (TextView, Button, ImageView...).
Para crear una lista dispone de dos métodos. La actividad que contiene la lista puede:
Para insertar datos en una lista se utiliza un adapter (adaptador). Éste permite asociar datos a una
vista que extienda de la clase AdapterView, así es fácil acceder a los datos almacenados (leer,
agregar, eliminar, modificar...) en una vista.
ArrayAdapter: permite rellenar una lista a partir de una tabla o de una colección.
a. ListActivity
El primer método consiste en crear una lista que herede de la clase ListActivity.
Para comenzar, cree un archivo XML que represente una vista que contenga solamente una
lista (carpeta layout).
<ListView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@android:id/list" />
</LinearLayout>
Para poder operar una ListView mediante una ListActivity, su lista debe tener obligatoriamente
como identificador @android:id/list.
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
Por el momento, la lista está vacía y no contiene ningún dato. Vamos a utilizar una tabla de cadenas
de caracteres como origen de datos.
Cree un ArrayAdapter para inyectar en la lista los datos provenientes de la tabla declarada
anteriormente.
El segundo parámetro representa el layout que se aplicará a cada fila de la lista. Puede o
bien crear un layout personalizado, o bien utilizar alguno de los proporcionados por Android.
El último paso consiste en asociar el adaptador, que contiene los datos que se inyectarán, a la
lista. Para ello, se utiliza el método setListAdapter:
SetListAdapter(adapter);
La segunda forma de crear una lista es, simplemente, usar una actividad.
Para ello, hay que crear el archivo XML que representa la lista.
<ListView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/myList" />
</LinearLayout>
Como en el caso anterior, el ejemplo utiliza una tabla de cadenas de caracteres así como
unArrayAdapter.
myList.setAdapter(adapter);
También puede crear adapters personalizados para gestionar mejor la visualización y los datos de
una lista.
A continuación se muestra un ejemplo que permite mostrar una lista que contiene el nombre y el
número de las diferentes versiones de Android usando un adapter personalizado.
Para comenzar, cree la clase AndroidVersion, que representa cualquier versión de Android.
El ejemplo utiliza un adapter personalizado que hereda de la clase ArrayAdapter (ya que utiliza una
tabla para inyectar datos en la lista).
<ListView
android:id="@+id/myList"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</LinearLayout>
Para personalizar la lista y hacerla más rica y agradable, hay que crear un layout personalizado que
servirá para especificar la interfaz correspondiente a cada fila de la lista.
<ImageView
android:id="@+id/icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="6dp"
android:src="@drawable/list_icon" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/title"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
/>
<TextView
android:id="@+id/description"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
</LinearLayout>
Por lo tanto, cada fila de la lista se compone de los siguientes elementos:
Un LinearLayout horizontal.
Una imagen.
Se utiliza un segundo LinearLayout (vertical) para mostrar los dos textos (título y
descripción).
A continuación, cree una clase que represente el adapter personalizado. Tendrá las siguientes
características específicas:
Heredará de la clase ArrayAdapter, ya que los datos se completarán usando una tabla.
Un constructor.
Un método getView: cada llamada a este método permitirá obtener una fila (dato y
valor) de la lista que se encontrará en una posición determinada.
ArrayList<AndroidVersion> androidVer;
int viewRes;
@Override
public View getView(int position, View convertView, ViewGroup
parent) {
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater)
context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(viewRes, parent, false);
}
AndroidVersion o = androidVer.get(position);
if (o != null) {
TextView tt = (TextView) v.findViewById(R.id.title);
TextView bt = (TextView)
v.findViewById(R.id.description);
if (tt != null) {
tt.setText("Nombre de la versión: " +
o.getVersionName());
}
if (bt != null) {
bt.setText("Número de la versión: " +
o.getVersionNumber());
}
}
return v;
}
}
El constructor sirve para almacenar los tres parámetros necesarios para implementar el adapter:
El contexto de la vista.
Este método permite obtener la vista a partir de una fila determinada (parámetro position).
La vista que representa la lista se pasa por parámetro al método (parámetro convertView).
La vista personalizada debe cargarse mediante el método inflate. Una vez se ha cargado,
se pasará por parámetro al método getView (parámetro convertView) en las siguientes
llamadas, lo que reduce el número de llamadas al método inflate (llamada con bastante
coste).
A continuación, hay que obtener el texto correspondiente a la fila que se desea mostrar.
Por último, hay que obtener los dos TextView (título y descripción de una fila) para
rellenarlos con los datos obtenidos en el paso anterior.
Para acabar, cree una actividad que permita inicializar la vista, el adapter personalizado y los
datos.
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
initList(androidList);
.........
}
}
Para gestionar el clic en cada uno de los elementos de una lista, utilice el
métodosetOnItem ClickListener en la instancia de la lista deseada.
list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapter, View v, int
position, long id) {
AndroidVersion selectedItem = (AndroidVersion)
adapter.getItemAtPosition(position);
Log.v("CustomAdapterExample", "Elemento seleccionado: "
+ selectedItem.getVersionName());
}
});