Buenas, la semana pasada os deje aprendiendo a aplicar estilos a los controles de Android, y esta semana vamos a crear un control personalizado que utilizaremos repetidas veces en nuestra aplicación. Lo cual nos ayudará a no repetir tanto código en Android.
<?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="wrap_content">
<ImageView android:id="@+id/img" android:layout_height="wrap_content" android:layout_width="wrap_content" />
<TextView android:id="@+id/lbl" android:layout_width="wrap_content" android:layout_height="wrap_content" />
<Button android:id="@+id/btn" android:text="enviar" android:layout_height="wrap_content" android:layout_width="wrap_content" />
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
on;
import android.widget.Ima
import android.widget.But
tgeView;
import android.widget.LinearLayout;
ItemList extends LinearLayout
import android.widget.TextView;
public class {
//definimos una variable para la etiqueta, la imagen y el botón
private TextView lbl;
private ImageView img;
private Button btn;
//Defínimos un método que nos permita setear desde fuera el texto de la etiqueta
public void setLabelText(String t){
lbl.setText(t);
}
//Defínimos un método que nos permita setear desde fuera de la clase la imagen.
//Como parámetro pasamos un entero ya queA ndroid hará referencia a los recursos con un entero para cada uno.
public void setImage(int resource){
img.setImageResource(resource);
}
public ItemList(Context context) {
super(context);
//Leemos la plantilla que hicimos antes para pintarla en pantalla. R.layout.item_list es una referencia al archivo item_list.xml que creamos antes, para hacer referencia muchos de los archivos de recursos que utilicemos lo haremos de esta forma, no tienen que ser siempre desde layout, pueden estar en drawable, string...
String infService = Context.LAYOUT_INFLATER_SERVICE;
LayoutInflater li = (LayoutInflater)getContext().getSystemService(infService);
li.inflate(R.layout.item_list, this, true);
//inicializamos los 3 controles que tenemos haciendo referencia a ellos y convirtiendolos al tipo que corresponda. Podemos tener en otros layouts elementos que se llamen igual pero Android sabe que estamos manejando este layout y que es aquí donde tiene que buscar primero elementos que tengas estos nombres.
lbl = (TextView) findViewById(R.id.lbl);
img = (ImageView) findViewById(R.id.img);
btn = (Button) findViewById(R.id.btn);
//definimos una acción para el botón cuando lo pulsemos
btn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
//En este caso solo cambiamos el texto de la etiqueta
lbl.setText("Cambiando texto etiqueta");
}
});
}
}
<LinearLayout android:id="@+id/lyt" android:layout_width="fill_parent" android:layout_height="wrap_content"></LinearLayout>
import android.app.Activity;
import android.os.Bundle;
import android.widget.LinearLayout;
public class HolaMundoActivity extends Activity {
//Definimos una variable privada para el contenedor de nuestros items
private LinearLayout lyt;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//Inicializamos el contenedor
lyt = (LinearLayout) findViewById(R.id.lyt);
//Si ya tuvieramos el contenedor cargado con otros items podríamos limpiar todo lo anterior con lo siguiente
//En este caso como empezamos sin ningún item no eliminamos nada
lyt.removeAllViews();
//Definimos un objeto tipo itemlist
ItemList item;
//Ahora añadiré un par de items de forma manual, pero bien se podrían ir creando leyendo de una base de datos o cualquier otra fuente de datos
//Llamamos al constructor del objeto
item = new ItemList(this);
//Seteamos el texto y la imagen
item.setLabelText("Texto 1");
item.setImage(R.drawable.icon);
//Añadimos el nuevo item al contenedor
lyt.addView(item);
//Vuelta a empezar para añadir otro item
item = new ItemList(this);
item.setLabelText("Texto 2");
item.setImage(R.drawable.icon);
lyt.addView(item);
//y así hasta que no tengamos más items
}
}