Professional Documents
Culture Documents
deaplicacionesmvilescon
Android(II)
Enelprimerseminarioaprendimos
CrearGUIs(Ac#vity)
Denicin(.xml)/res/layout/
Asociarun.java
Recogerreferenciasenel.java
(ndViewById)
Enelprimerseminarioaprendimos
Navegacinypasode
informacinentreacEvidades
(nombre,ana)
(resultado,34)
Enestesegundoseminario
aprenderemos
Usoypersonalizacindel
componenteListView
ContenidoestEco
Contenidodinmico
Borradoymodicacindeelementos
Creacinypersonalizacindemens
Creacindemenscontextuales
MstcnicasdenoEcacinen
Android
Dilogos
Mslayoutsycontroles
TableLayout
Spinner
AplicacinAgenda(Lista
decontactos)
Creamosunnuevoproyecto,al
quellamaremosAgenda(API8)
CrearlaacEvidadprincipal
Ac#vityName:Agenda
LayoutName:
ac-vity_agenda.xml
UsarunLinearLayoutde
orientacinverEcal
EnlaventanaOutline,
seleccionandoellayout
creadopordefecto
(Rela#veLayout)conelbotn
derecho(ChangeLayout)
CrearlasiguienteGUI:
TextView(FormWidgets)
ListView(Composite)
Ejecutalaaplicacinlalista
aparecesincontenido
ac-vity_agenda.xml
Aadircontenido(estEco)ala
listadecontactos
Empezamosincluyendouncontenidoest#co(unarraydeStringsconlos
nombresdeloscontactos)
Aadimosunatributoprivadoconlosnombresdealgunoscontactos:
private String[] contactosEstatico ={"Mara Garca","Jos Prez","Jos Ruiz",
"Carmen Lpez"};
NecesitamosobtenerunareferenciaalobjetolstContactos(denidoenelchero
deinterfaz;xml)enelcheroAgenda.java
Creamosunatributoprivadoenlaclase
UsamoselmtodondViewByIdparaobtenerdichareferenciaenelmtodoonCreate
Hacerlosimportsnecesarios
Conectamoslavista(elobjetolstContactos)conlosdatosamostrar(contactos):
Adaptador
//Obtener una referencia a la lista grfica
lstContactos =(ListView)findViewById(R.id.lstContactos);
//Aadir contenido esttico al elemento ListView
ArrayAdapter<String> adaptador = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, contactosEstatico);
lstContactos.setAdapter(adaptador);
private ListView lstContactos;
Aadimosunoyentedeseleccin
detemsdelalista
AadimosunoyentedeseleccindetemsasociadoalaListView.
HarqueenlblSeleccionadoaparezcaelnombredelcontactoseleccionadoporel
usuarioenlalista
ParaellohayquetomarunareferenciaalaTextView(ndViewById),aligualquese
hahechoconlaListView
Hacerlosimportscorrespondientes
import android.view.View;
import android.widget.AdapterView.OnItemClickListener;
//Obtener una referencia a la etiqueta en la que se mostrar el tem seleccionado
lblSeleccionado = (TextView)findViewById(R.id.lblSeleccionado);
lstContactos.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View v, int posicion, long id) {
lblSeleccionado.setText("Contacto seleccionado: "+ lstContactos.getItemAtPosition
(posicion));
}
});
Ejecutalaaplicacin
private TextView lblSeleccionado;
Aadircontenido
(personalizadoy
dinmico)alalista
decontactos
VamosasusEtuirelvectorestEco
conunaestructuradinmica,encada
unadecuyoselementosseaadauna
instanciadelaclaseContactoque
deberemoscrear.
NewClass
Lacrearemosdentrodelpaquete,enla
carpetasrc
EnelcheroAgenda.javacrearemos
unatributoprivadoquecontengael
listadecontactosamostrarenla
ListView
package com.example.agenda;
public class Contacto {
private String nombre;
private String telefono;
private int tipo; //0:familia; 1:amigo; 2:trabajo
private String email;
private String direccion;
public Contacto(String nom, String tel, int
tip, String em, String dir){
nombre= nom;
telefono= tel;
tipo=tip;
email=em;
direccion=dir;
}
public String getNombre(){
return nombre;
}
public String getTelefono(){
return telefono;
}
public int getTipo(){
return tipo;
}
public String getEmail(){
return email;
}
public String getDireccion(){
return direccion;
}
}
private ArrayList<Contacto> contactos;
Aadircontenido(personalizadoy
dinmico)alalistadecontactos
EnelmtodoonCreateinicializamoslalistadecontactosconalgunosdatosde
prueba:
//Crear la lista de contactos y aadir algunos datos de prueba
contactos = new ArrayList<Contacto>();
contactos.add(new Contacto("Mara Rodrguez", "234 123 411",1, "mariarodriguez@correo.com", "C/Ronda, 10"));
contactos.add(new Contacto("Jos Prez", "234 234 234",1, "joseperez@correo.com", "C/Huertas, 1"));
contactos.add(new Contacto("Jos Ruz", "545 342 455",2, "joseruiz@correo.com", "C/Ancha, 7"));
contactos.add(new Contacto("Carmen Lpez", "666 433 566",0, "carmenlopez@correo.com", "C/Luz, 12"));
contactos.add(new Contacto("Mara Prez", "444 564 331",1, "mariapezar@correo.com", "C/Ciudad, 11"));
contactos.add(new Contacto("Jos Garca", "233 223 411",1, "josegarcia@correo.com", "C/Darro, 4"));
contactos.add(new Contacto("Jos Ruz", "211 234 234",2, "joseruiz@correo.com", "C/Ronda, 6"));
contactos.add(new Contacto("Carmen Ruz", "544 442 425",2, "carmenrodriguez@correo.com", "C/Principal,
13"));
contactos.add(new Contacto("Carmen Rodrguez", "623 453 335",0, "carmenrodriguez@correo.com", "C/Rodero,
5"));
contactos.add(new Contacto("Mara Garca", "432 456 331",1, "mariagarcia@correo.com", "C/Paseo, 8"));
Tenemosqueconectarlavista(elobjetolstContactosconlosnuevosdatosa
mostrar(contactos):Adaptador
Enestecasocrearemosunaclaseadaptadorapersonalizada,quepermita
mostrarencadatemdelalista:
nombre,telfonoyunaimagenidenEcaEvadelEpodecontacto(familia,amigo,
trabajo)
Denirelaspectogrcodecadauno
delostemsdelalista
Primerocreamoselaspectogrcoquetendrcadaunodelostemsdelalista
Tendremosquecrearunnuevocherodelayout
Enlacarpeta/res/layout/creamosunnuevocheroxml(layout_item.xml)
EllayoutserunLinearLayouthorizontal
CambiareltamaodelaTextView(lblNombre)a20sp
EspecicareltamaodelaImageView(imagContacto)widthyheighta50dp
Incluirlasimgenesqueseusarnpararenderizarcadaunodelostemssegn
suEpo(familia,amigo,trabajo).
Arrastrarlasimgenesalacarpeta/res/drawable-hdpi/
layout_item.xml
NewClass
Lanuevaclase(alaquellamaremosAdaptadorLista.java)extender
delaclaseArrayAdapter
package com.example.agenda;
import java.util.ArrayList;
import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class AdaptadorLista extends ArrayAdapter {
Activity context;
private ArrayList<Contacto> contactos;
AdaptadorLista (Activity context, ArrayList<Contacto> contactos) {
super(context, R.layout.layout_item, contactos);
this.context = context;
this.contactos = contactos;
}
CreamoslanuevaclaseAdaptadora
public View getView(int position, View convertView, ViewGroup parent)
{
LayoutInflater inflater = context.getLayoutInflater();
View item = inflater.inflate(R.layout.layout_item, null);
TextView lblNombre = (TextView)item.findViewById(R.id.lblNombre);
lblNombre.setText(contactos.get(position).getNombre());
TextView lblTelefono = (TextView)item.findViewById(R.id.lblTelefono);
lblTelefono.setText(contactos.get(position).getTelefono());
ImageView imagContacto = (ImageView)item.findViewById(R.id.imagContacto);
switch (contactos.get(position).getTipo())
{
case 0: //Cargar imagen de contactos tipo "familia"
imagContacto.setImageResource(R.drawable.familia);
break;
case 1: //Cargar imagen de los contactos tipo "amigos"
imagContacto.setImageResource(R.drawable.amigo);
break;
case 2: //Cargar imagen de los contactos tipo "trabajo"
imagContacto.setImageResource(R.drawable.trabajo);
}
return(item);
}
}
CreamoslanuevaclaseAdaptadora
Aadircontenidoalalistade
contactos:Adaptador
AsociaralobjetoListViewelnuevoadaptador(Agenda.java)
Nota:Comentarlasinstruccionesqueanteshemosusadoparaasociarun
adaptadoralalista
Ejecutalaaplicacin.
registerForContextMenu(lstContactos);
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo)
{
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_contextual, menu);
}
Oyentedeunaopcindelmen
contextual(BorrarContacto)
CreamoseloyentedelasopcionesdelmencontextualBorrar
Contacto(FicheroAgenda.java):onContextItemSelected
Cargamoselcontenidodedichoatributoenelmtodoenelquesecreaelmen
contextual(onCreateContextMenu)
Modicamoseneloyentedelmencontextualelconjuntodeaccionesarealizar
cuandoelusuarioseleccionalaopcinBorrarContacto(onContextItemSelected)
case R.id.borrarContacto:
Log.d("LogCat","Puls la opcin de men contextual Borrar Contacto");
contactos.remove(contactoSeleccionado);
((AdaptadorLista)lstContactos.getAdapter()).notifyDataSetChanged();
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)
{
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_contextual, menu);
//Referencia al contacto seleccionado
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
contactoSeleccionado = info.position;
}
private int contactoSeleccionado;
AadiendounaacEvidadparaver
losdetallesdeuncontacto
Creamosunasegundaventana(detalles_contacto.xml)
Layout:TableLayout
Aadir,uElizandolaventanaOutline5las:TableRow(usandoelbotn
derecho)
ParamejorarelaspectoponerelatributodelasTextView:PaddingLe@=
10dp
AadiendounaacEvidadparaver
losdetallesdeuncontacto
Creamosel.javaasociadoalanuevaAc#vitycreada
VentanaContacto.java(extendsAcEvity)
TomarelcdigodelmtodoonCreateycargarlainterfazconlaGUIdenidaenel
xml(detalles_contacto)
Queremosque,cuandoelusuariopulselaopcinVerDetallesdelmen
contextual,sellamealasegundaacEvidad,pasndolelosdatosdelcontacto
seleccionado
Cambiarelcdigodeloyenteasociadoalmencontextual(onContextItemSelected)
setContentView(R.layout.detalles_contacto);
case R.id.verDetalles:
Log.d("LogCat","Puls la opcin del men contextual Ver Detalles");
//Pasar los datos del contacto a la otra ventana
Intent i = new Intent(this, VentanaContacto.class);
Log.d("LogCat", "Item seleccionado "+contactoSeleccionado);
i.putExtra("nombre", contactos.get(contactoSeleccionado).getNombre());
i.putExtra("telefono", contactos.get(contactoSeleccionado).getTelefono());
i.putExtra("tipo",contactos.get(contactoSeleccionado).getTipo());
i.putExtra("email",contactos.get(contactoSeleccionado).getEmail());
i.putExtra("direccion",contactos.get(contactoSeleccionado).getDireccion());
startActivity(i);
break;
AadiendounaacEvidadpara
verlosdetallesdeuncontacto
NoolvidarregistrarlanuevaAc#vityenelchero
AndroidManifest.xml!!!
AadiendounaacEvidadpara
verlosdetallesdeuncontacto
RecogerlosdatosenviadosalasegundaAc#vity
(VentanaContacto.java).
Crearlosatributosprivados
EnelmtodoonCreate
ObtenerreferenciasalosobjetosgrcosdelaGUIUElizar
ndViewById
IncluircontenidoenelobjetoSpinner
UsarelobjetoBundleparaobtenerlosdatosrecibidos
RellenarlaGUIconlosdatosrecibidos
//Atributos privados a nivel de
clase
private EditText txtNombreC;
private EditText txtTelefonoC;
private Spinner spinnerTipo;
private EditText txtEmailC;
private EditText txtDireccionC;
AadiendounaacEvidadpara
verlosdetallesdeuncontacto
//Obtenemos las referencias a los elementos grficos de la GUI
txtNombreC=(EditText)findViewById(R.id.txtNombreC);
txtTelefonoC=(EditText)findViewById(R.id.txtTelefonoC);
spinnerTipo=(Spinner)findViewById(R.id.spinnerTipo);
//Llenar de contenido el Spinner
String []opciones={"Familia", "Amigo", "Trabajo"};
ArrayAdapter<String> adapter = new ArrayAdapter<String>
(this,android.R.layout.simple_spinner_item, opciones);
spinnerTipo.setAdapter(adapter);
txtEmailC=(EditText)findViewById(R.id.txtEmailC);
txtDireccionC=(EditText)findViewById(R.id.txtDireccionC);
//Recoger los datos enviados por la primera actividad y mostrarlos en la GUI
Bundle bundle=getIntent().getExtras();
txtNombreC.setText(bundle.getString("nombre"));
txtTelefonoC.setText(bundle.getString("telefono"));
spinnerTipo.setSelection(bundle.getInt("tipo"));
txtEmailC.setText(bundle.getString("email"));
txtDireccionC.setText(bundle.getString("direccion"));
Guardarloscambioshechosen
laventanadedetalles
Aadimosunbotnenlaventanaquepermiteverlosdetallesdel
contacto(btnSalvarC)
EnelcheroVentanaContacto.javaseaadeeloyenteonClickdelnuevo
botn
btnSalvarC = (Button)findViewById(R.id.btnSalvarC);
btnSalvarC.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent nuevoContacto = new Intent();
nuevoContacto.putExtra("nombre",txtNombreC.getText().toString());
nuevoContacto.putExtra("telefono",txtTelefonoC.getText().toString());
nuevoContacto.putExtra("tipo",spinnerTipo.getSelectedItemPosition());
nuevoContacto.putExtra("email",txtEmailC.getText().toString());
nuevoContacto.putExtra("direccion",txtDireccionC.getText
().toString());
setResult(RESULT_OK, nuevoContacto);
finish();
}
});
private Button btnSalvarC;
Guardarloscambioshechosen
laventanadedetalles
EnelcheroAgenda.javahayquecambiarlallamadaalasegunda
acEvidad
EnelmtodoonContextItemSelected
protected void onActivityResult(int requestCode, int resultCode, Intent data){
super.onActivityResult(requestCode, resultCode, data);
Bundle b = data.getExtras();
if (requestCode == 1234){
if (resultCode == RESULT_OK){
Contacto contactoModificado = new Contacto(b.getString("nombre"),b.getString
("telefono"), b.getInt("tipo"), b.getString("email"), b.getString("direccion"));
contactos.set(contactoSeleccionado, contactoModificado);
((AdaptadorLista)lstContactos.getAdapter()).notifyDataSetChanged();
}
}
}
//startActivity(i);
startActivityForResult(i, 1234);
Otroejemplo:Usodelcontrol
Gallery
Visualizarimgenes.
UsodelobjetoGallery
Hayvariosobjetosquepuedenusarseparamostrar
imgenes:ImageView,Gallery,ImageSwitcher,y
GridView
Enesteejemplovamosaverelusocombinadode
GalleryeImageView
ElobjetoGallerypermitelavisualizacindelos
temsenunalistaconscrollhorizontal.
Crearemosunaaplicacinquemuestreenunobjeto
Galleryunaseriedeimgenes(thumbnails),yunavez
seleccionadaunadeellas,stasemuestreenunobjeto
ImageView.
CrearunnuevoproyectoAndroid(Galeria)
UsarunLinearLayoutdeorientacinverEcal
EnlaventanaOutline,seleccionandoellayoutcreado
pordefecto(Rela#veLayout)conelbotnderecho
(ChangeLayout)
CrearlaGUI
PonerelPaddingTopdelaImageViewa20dp
PropiedadesdelImageViewa320dp(width)y250dp
(height)
Cargarlasimgenesenel
proyecto(arrastrarlas)a/res/
drawable-hdpi/
Visualizarimgenes.Uso
delobjetoGallery
Enelchero.javacrearunatributoprivado:elarrayestEco
quecontengalosIDsdelasimgenes
EnelmtodoonCreatedelaclase.java:
ObtenerlareferenciaalosobjetosdelaGUI(ndViewById)
LlenardecontenidoelobjetoGallery(Adapter)
CrearunoyentedeseleccindelobjetoGallery
//Array de imgenes a mostrar en
el objeto Gallery
private Integer[] IdImagenes = {
R.drawable.imag1,
R.drawable.imag2,
R.drawable.imag3,
R.drawable.imag4,
R.drawable.imag5,
R.drawable.imag6,
R.drawable.imag7
};
private Gallery gallery;
private ImageView imageView;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Obtener referencias a los objetos grficos de la GUI
gallery = (Gallery) findViewById(R.id.gallery1);
imageView = (ImageView) findViewById(R.id.imageView1);
//Asociar un adaptador a la Gallery
gallery.setAdapter(new ImageAdapter(this, IdImagenes));
//Oyente de seleccin de imgenes de la Gallery
gallery.setOnItemClickListener(new OnItemClickListener()
{
public void onItemClick(AdapterView<?> parent, View v,
int position, long id)
{
//Mostrar la imagen seleccionada en el objeto ImageView
imageView.setImageResource(IdImagenes[position]);
}
});
}
Crearlaclase
Adaptadora
asociadaala
Gallery
public class ImageAdapter extends BaseAdapter
{
private Context context;
private Integer[] IdImagenes;
public ImageAdapter(Context context, Integer[] IdImagenes )
{
this.context = context;
this.IdImagenes = IdImagenes;
}
//devuelve el nmero de imgenes
public int getCount() {
return IdImagenes.length;
}
//devuelve el tem de la posicin pasada como parmetro
public Object getItem(int position) {
return position;
}
//devuelve el ID del tem de la posicin pasada como parmetro
public long getItemId(int position) {
return position;
}
//devuelve la vista ImageView
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if (convertView == null) {
imageView = new ImageView(context);
imageView.setImageResource(IdImagenes[position]);
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
imageView.setLayoutParams(new Gallery.LayoutParams(150, 120));
} else {
imageView = (ImageView) convertView;
}
return imageView;
}
}