You are on page 1of 33

Introduccinaldesarrollo

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

AdaptadorLista adaptador = new AdaptadorLista(this,contactos);


lstContactos.setAdapter(adaptador);
Modicamoseloyentedeseleccindetems,paraquesiga
mostrandosoloelnombredelcontactoseleccionado
lblSeleccionado.setText("Contacto seleccionado: "+ ((Contacto)
lstContactos.getItemAtPosition(posicion)).getNombre());
Ejecutalaaplicacin.
Aadirunmenalaaplicacin
Creacindemens2mtodos:
1. Mediante la
definicin del men
en un fichero XML
(/res/menu/)
!"#$%&'()$
!"#$%&'&()*+"#$%&*,%-./%&
!"#$%&#'%&#&()*(+",+&#-.-/,-'%&#'+$#0*/&%#'+#1/%)/-2-3(4"#5"'/%('#"%&#6-2%&#-#3+",/-/#+"#$-#
3/+-3(4"#'+#2+"7&#'+#%.3(%"+&#+"#&*&#'(8+/+",+&#6-/(-",+&9#
!"#5"'/%('#.%'+2%&#+"3%",/-/#:#,(.%&#'(8+/+",+&#'+#2+"7&;#
!"#$%& '()#*)+,-"%9# <%&# 2=&# >-?(,*-$+&@# -.-/+3+"# +"# $-# A%"-# ("8+/(%/# '+# $-# .-",-$$-# -$#
.*$&-/#+$#?%,4"#2+"7 del Lelefono#
./01"#$%9#B%"#2+"7&#&+3*"'-/(%&#C*+#&+#.*+'+"#2%&,/-/#-$#.*$&-/#&%?/+#*"-#%.3(4"#
'+#*"#2+"7#./("3(.-$9#
!"#$%& 23#4"54/,-"%9# D,($+&# +"# 2*3>-&# %3-&(%"+&@# -.-/+3+"# -$# /+-$(A-/# *"-# .*$&-3(4"#
$-/)-#&%?/+#-$)7"#+$+2+",%#'+#$-#.-",-$$-9#
!"# +&,+# ./(2+/# -.-/,-'%# &%?/+# +$# ,+2-# 6+/+2%&# 342%# ,/-?-E-/# 3%"# $%&# '%&# ./(2+/%&# ,(.%&# '+#
2+"7&9# !"# +$# &()*(+",+@# 3%2+",-/+2%&# $%&# 2+"7&# 3%",+F,*-$+&# G# -$)*"-&# 3-/-3,+/H&,(3-&# 2=&#
-6-"A-'-&9#
0%2%# 3-&(# &(+2./+@# 6-2%&# -# ,+"+/# '%&# -$,+/"-,(6-&# -# $-# >%/-# '+# 2%&,/-/# *"# 2+"7# +"# "*+&,/-#
-.$(3-3(4"#5"'/%('9#<-#./(2+/-#'+#+$$-&#2+'(-",+#$-#'+8("(3(4"#'+$#2+"7#+"# *"#8(3>+/%#IJ<@#G#
$-#&+)*"'-#3/+-"'%#+$#2+"7#'(/+3,-2+",+#2+'(-",+#34'()%9#!"#+&,+#-.-/,-'%#6+/+2%&#-2?-&#
-$,+/"-,(6-&9#
K+-2%&# +"# ./(2+/# $*)-/# 342%# 3/+-/# *"# 2+"7# -# .-/,(/# '+# &*# '+8("(3(4"# +"# IJ<9# <%&# 8(3>+/%&#
XML de menu se deben colocur en lu cureLu res\menu de nuesLro royecLo y Lendrun unu
+&,/*3,*/-#-"=$%)-#-#$-#'+$#&()*(+",+#+E+2.$%;#
<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android="http://schemas.android.com/apk/res/android">

<item android:id="@+id/MnuOpc1" android:title="Opcion1"
android:icon="@drawable/tag"></item>
<item android:id="@+id/MnuOpc2" android:title="Opcion2"
android:icon="@drawable/filter"></item>
<item android:id="@+id/MnuOpc3" android:title="Opcion3"
android:icon="@drawable/chart"></item>

</menu>
0%2%#6+2%&@#$-#+&,/*3,*/-# ?=&(3-#'+#+&,%&#8(3>+/%&#+&#2*G# &+"3($$-9#L+"'/+2%&#*"# +$+2+",%#
./("3(.-$#<menu>#C*+#3%",+"'/=#*"-#&+/(+#'+#+$+2+",%&#<item>#C*+#&+#3%//+&.%"'+/="#3%"#
$-&#'(&,(",-&#%.3(%"+&#-#2%&,/-/#+"#+$#2+"79#!&,%&#+$+2+",%&# <item>#,+"'/="#-#&*#6+A#6-/(-&#
./%.(+'-'+&# ?=&(3-&@# 3%2%# &*# MN# Oandroid:idP@# &*# ,+F,%# Oandroid:titleP# %# &*# (3%"%#
Oandroid:iconP9# <%&# (3%"%&# *,($(A-'%&# '+?+/="# +&,-/# .%/# &*.*+&,%# +"# $-&# 3-/.+,-&#
res\drawable- de nuesLro royecLo ul flnul del -.-/,-'%#%&#.-&%# *"%&#+"$-3+&#'%"'+#
.%'Q(&#3%"&+)*(/#-$)*"%&#(3%"%&#'+#2+"7#5"'/%('#)/-,*(,%&P9#
En este evento deberemos
inflar el men de forma
parecida a como ya hemos
hecho otras veces con otro
tipo de layouts.
!"#$ %&'$ (&)*"*(+$ &,$ -&".$ &"$ &,$ )*/0&1+$ 2345$ 6&"(1&-+7$ 89&$ *-:,&-&"6#1$ &,$ &%&"6+$
onCreateOptionsMenu()$ (&$ ,#$ #/6*%*(#($ 89&$ 89&1&-+7$ 89&$ ,+$ -9&761&;$ <"$ &76&$ &%&"6+$
deberemos lnflur el menu de formu urecldu u /+-+$ =#$ 0&-+7$ 0&/0+$ +61#7$ %&/&7$ /+"$ +61+$
6*:+$ (&$ ,#=+967;$ >1*-&1+$ +?6&"(1&-+7$ 9"#$ 1&)&1&"/*#$ #,$ !"#$%&'($ -&(*#"6&$ &,$ -@6+(+$
getMenuInflater()$=$:+76&1*+1-&"6&$A&"&1#1&-+7$,#$&7619/691#$(&,$-&".$,,#-#"(+$#$79$
-@6+(+$ infate()$ :#7B"(+,&$ /+-+$ :#1B-&61+$ &,$ CD$ (&,$ -&".$ (&)*"*(+$ &"$ 2345$ 89&$ &"$
"9&761+$ /#7+$ 7&1B$ R.menu.menu_principal;$ >+1$ .,6*-+$ (&%+,%&1&-+7$ &,$ %#,+1$ 619&$ :#1#$
/+")*1-#1$89&$(&?&$-+761#17&$&,$-&".;$
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//Alternativa 1
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_principal, menu);
return true;
}
E$ =#$ 0&-+7$ 6&1-*"#(+5$ /+"$ &76+7$ 7&"/*,,+7$ :#7+7$ "9&761#$ #:,*/#/*F"$ =#$ (&?&1G#$ -+761#1$ 7*"$
:1+?,&-#7$ &,$ -&".$ 89&$ 0&-+7$ /+"7619*(+5$ #9"89&$ 6+(#%G#$ "+7$ )#,6#1G#$ *-:,&-&"6#1$ ,#$
)9"/*+"#,*(#($(&$/#(#$9"#$(&$,#7$+:/*+"&7$-+761#(#7;$
$
$
!"#$ %&'$ (&)*"*(+$ &,$ -&".$ &"$ &,$ )*/0&1+$ 2345$ 6&"(1&-+7$ 89&$ *-:,&-&"6#1$ &,$ &%&"6+$
onCreateOptionsMenu()$ (&$ ,#$ #/6*%*(#($ 89&$ 89&1&-+7$ 89&$ ,+$ -9&761&;$ <"$ &76&$ &%&"6+$
deberemos lnflur el menu de formu urecldu u /+-+$ =#$ 0&-+7$ 0&/0+$ +61#7$ %&/&7$ /+"$ +61+$
6*:+$ (&$ ,#=+967;$ >1*-&1+$ +?6&"(1&-+7$ 9"#$ 1&)&1&"/*#$ #,$ !"#$%&'($ -&(*#"6&$ &,$ -@6+(+$
getMenuInflater()$=$:+76&1*+1-&"6&$A&"&1#1&-+7$,#$&7619/691#$(&,$-&".$,,#-#"(+$#$79$
-@6+(+$ infate()$ :#7B"(+,&$ /+-+$ :#1B-&61+$ &,$ CD$ (&,$ -&".$ (&)*"*(+$ &"$ 2345$ 89&$ &"$
"9&761+$ /#7+$ 7&1B$ R.menu.menu_principal;$ >+1$ .,6*-+$ (&%+,%&1&-+7$ &,$ %#,+1$ 619&$ :#1#$
/+")*1-#1$89&$(&?&$-+761#17&$&,$-&".;$
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//Alternativa 1
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_principal, menu);
return true;
}
E$ =#$ 0&-+7$ 6&1-*"#(+5$ /+"$ &76+7$ 7&"/*,,+7$ :#7+7$ "9&761#$ #:,*/#/*F"$ =#$ (&?&1G#$ -+761#1$ 7*"$
:1+?,&-#7$ &,$ -&".$ 89&$ 0&-+7$ /+"7619*(+5$ #9"89&$ 6+(#%G#$ "+7$ )#,6#1G#$ *-:,&-&"6#1$ ,#$
)9"/*+"#,*(#($(&$/#(#$9"#$(&$,#7$+:/*+"&7$-+761#(#7;$
$
$
menu_principal.xml
Una vez definido el men en el fichero XML, tendremos que implementar el evento
onCreateOptionsMenu() de la actividad que queremos que lo muestre.

Aadirunmenalaaplicacin
Creacindemens2mtodos:
2. Creando el men directamente mediante cdigo
!"#$ %&'$ (&)*"*(+$ &,$ -&".$ &"$ &,$ )*/0&1+$ 2345$ 6&"(1&-+7$ 89&$ *-:,&-&"6#1$ &,$ &%&"6+$
onCreateOptionsMenu()$ (&$ ,#$ #/6*%*(#($ 89&$ 89&1&-+7$ 89&$ ,+$ -9&761&;$ <"$ &76&$ &%&"6+$
deberemos lnflur el menu de formu urecldu u /+-+$ =#$ 0&-+7$ 0&/0+$ +61#7$ %&/&7$ /+"$ +61+$
6*:+$ (&$ ,#=+967;$ >1*-&1+$ +?6&"(1&-+7$ 9"#$ 1&)&1&"/*#$ #,$ !"#$%&'($ -&(*#"6&$ &,$ -@6+(+$
getMenuInflater()$=$:+76&1*+1-&"6&$A&"&1#1&-+7$,#$&7619/691#$(&,$-&".$,,#-#"(+$#$79$
-@6+(+$ infate()$ :#7B"(+,&$ /+-+$ :#1B-&61+$ &,$ CD$ (&,$ -&".$ (&)*"*(+$ &"$ 2345$ 89&$ &"$
"9&761+$ /#7+$ 7&1B$ R.menu.menu_principal;$ >+1$ .,6*-+$ (&%+,%&1&-+7$ &,$ %#,+1$ 619&$ :#1#$
/+")*1-#1$89&$(&?&$-+761#17&$&,$-&".;$
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//Alternativa 1
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_principal, menu);
return true;
}
E$ =#$ 0&-+7$ 6&1-*"#(+5$ /+"$ &76+7$ 7&"/*,,+7$ :#7+7$ "9&761#$ #:,*/#/*F"$ =#$ (&?&1G#$ -+761#1$ 7*"$
:1+?,&-#7$ &,$ -&".$ 89&$ 0&-+7$ /+"7619*(+5$ #9"89&$ 6+(#%G#$ "+7$ )#,6#1G#$ *-:,&-&"6#1$ ,#$
)9"/*+"#,*(#($(&$/#(#$9"#$(&$,#7$+:/*+"&7$-+761#(#7;$
$
$
!"#"$%&#"'$("#&)*+,"$+)*&'-$&'*&$#.'#"$#&)/$*+#0.1)$2"$3",45+#"'$(4&+4$,.4&(*+#&)*&$
#&,.+)*&$ (6,.7"-$ *+#0.1)$ ,&',&$ &2$ &8&)*"$ onCreateOptionsMenu()9$ :+4+$ &22"-$ 3+4+$
+;+,.4$(+,+$"3(.6)$,&2$#&)/$3",&#"'$<*.2.=+4$&2$#1*","$add()$'"04&$&2$"0>&*"$,&$*.3"$Menu$
?<&$ )"'$ 22&7+$ ("#"$ 3+4@#&*4"$ ,&2$ &8&)*"9$ A'*&$ #1*","$ 4&(.0&$ B$ 3+4@#&*4"'C$ DE$ ,&2$ 74<3"$
+'"(.+,"$ +$ 2+$ "3(.6)$ F8&4&#"'$ ?<1$ &'$ &'*"$ &)$ &2$ '.7<.&)*&$ +3+4*+,"-$ 3"4$ +%"4+$ <*.2.=+4&#"'$
Menu.NONEG-$ <)$ DE$ /).("$ 3+4+$ 2+$ "3(.6)$ F?<&$ ,&(2+4+4&#"'$ ("#"$ (")'*+)*&'$ ,&$ 2+$ (2+'&G-$ &2$
"4,&)$,&$2+$"3(.6)$F?<&$)"$)"'$.)*&4&'+$3"4$ +%"4+-$<*.2.=+4&#"'$ Menu.NONEG$H$&2$*&I*"$ ,&$2+$
"3(.6)9$ :"4$ "*4+$ 3+4*&-$ &2$ .(")"$ ,&$ (+,+$ "3(.6)$ 2"$ &'*+02&(&4&#"'$ #&,.+)*&$ &2$ #1*","$
setIcon()$3+'@),"2&$&2$DE$,&2$4&(<4'"9$$
J&+#"'$ (6#"$ ?<&,+45+$ &2$ (6,.7"$ <*.2.=+),"$ &'*+$ +2*&4)+*.8+-$ ?<&$ 7&)&4+45+$ <)$ #&)/$
&I+(*+#&)*&$.7<+2$+2$,&2$&>&#32"$+)*&4."4C$
private static final int MNU_OPC1 = 1;
private static final int MNU_OPC2 = 2;
private static final int MNU_OPC3 = 3;

//...

@Override
public boolean onCreateOptionsMenu(Menu menu) {
//Alternativa 2
menu.add(Menu.NONE, MNU_OPC1, Menu.NONE,
"Opcion1").setIcon(R.drawable.tag);
menu.add(Menu.NONE, MNU_OPC1, Menu.NONE,
"Opcion2").setIcon(R.drawable.filter);
menu.add(Menu.NONE, MNU_OPC1, Menu.NONE,
"Opcion3").setIcon(R.drawable.chart);
return true;
}
!")'*4<.,"$ &2$ #&)/-$ 2+$ .#32&#&)*+(.6)$ ,&$ (+,+$ <)+$ ,&$ 2+'$ "3(.")&'$ '&$ .)(2<.4@$ &)$ &2$ &8&)*"$
onOptionsItemSelected() ,&$ 2+$ +(*.8.,+,$ ?<&$ #"'*4+4@$ &2$ #&)/9$ A'*&$ &8&)*"$ 4&(.0&$
("#"$ 3+4@#&*4"$ &2$ .*&#$ ,&$ #&)/$ ?<&$ %+$ '.,"$ 3<2'+,"$ 3"4$ &2$ <'<+4."-$ (<H"$ DE$ 3",&#"'$
4&(<3&4+4$ (")$ &2$ #1*","$ getItemId()9$ K&7/)$ &'*&$ DE$ 3",4&#"'$ '+0&4$ ?<1$ "3(.6)$ %+$ '.,"$
3<2'+,+$ H$ &>&(<*+4$ <)+'$ +((.")&'$ <$ "*4+'9$ A)$ )<&'*4"$ (+'"$ ,&$ &>&#32"-$ 2"$ /).("$ ?<&$ %+4&#"'$
'&4@$#",.L.(+4$&2$*&I*"$,&$<)+$&*.?<&*+$FlblMensajeG$("2"(+,+$&)$2+$3+)*+22+$34.)(.3+2$,&$2+$
+32.(+(.6)9$
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.MnuOpc1:
lblMensaje.setText("Opcion 1 pulsada!");
return true;
case R.id.MnuOpc2:
lblMensaje.setText("Opcion 2 pulsada!");;
return true;
case R.id.MnuOpc3:
lblMensaje.setText("Opcion 3 pulsada!");;
return true;
default:
return super.onOptionsItemSelected(item);
}
}
Para ello, para aadir cada opcin del
men podemos utilizar el mtodo add()
sobre el objeto de tipo Menu que nos
llega como parmetro del evento.
Este mtodo recibe 4 parmetros:
El ID del grupo asociado a la opcin
Un ID nico para la opcin (que
podemos declarar como constantes de
la clase)
El orden de la opcin (Menu.NONE)
El texto de la opcin.
Por otra parte, el icono de cada opcin lo
estableceremos mediante el mtodo
setIcon() pasndole el ID del recurso.
Aadirunmenalaaplicacin
Aadiremosdosopcionesdemenalaventanaprincipaldela
aplicacin.Lasopcionesirnacompaadasdedosiconos.
Aadircontacto
Acercade
UElizaremoselprimer
mtodo
Paraaadirunmenhayque
crearunnuevocheroXML
(New->AndroidXMLFile)
Nosotrosnocrearemosun
nuevoxml(pordefectoal
crearelproyectoyasecre
uno):agenda.xml(/res/
menu/)
Aadirunmenala
aplicacin
Aadimos(sinolohemoshechoantes)las
imgenesqueacompaarnalosdostems
demen
Crearunaventanadedilogo
Laventanadedilogoselanzarcuandoelusuariopulselaopcin
demenAcercade...(Agenda.java)
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.acercaDe:
Log.d("LogCat","Puls la opcin de men Acerca De...");
//Se muestra una ventana de dilogo
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Acerca de...");
builder.setMessage("Aplicacin creada por Ana I Molina");
builder.setPositiveButton("OK",null);
builder.create();
builder.show();
break;
case R.id.aniadirContacto:
Log.d("LogCat","Puls la opcin de men Aadir Contacto");
}
return true;
}
Ejecutalaaplicacin.
Aadirunmencontextualala
lista
Otravariantedemendeopcionessonlosmencontextualesquesepueden
asociaradisEntoscomponentesvisualesdelformulario(TextView,EditText,
ListViewetc.)
UnmencontextualaparececuandoelusuariopresionaporunEempomso
menosprolongadoelcontrolvisual
CrearunnuevocheroXML(NewAndroidXMLFile).Llamaralchero
menu_contextual.xml
Aadirunmencontextualala
lista
Registrarelmencontextualalelemento
ListView(enelmtodoonCreate)
AadirelmtodoonCreateContextMenua
Agenda.java

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

public boolean onContextItemSelected (MenuItem item) {


switch (item.getItemId()) {
case R.id.verDetalles:
Log.d("LogCat","Puls la opcin del men contextual Ver Detalles");
break;
case R.id.borrarContacto:
Log.d("LogCat","Puls la opcin de men contextual Borrar Contacto");
}
return true;
}
Ejecutalaaplicacin(verpestaaLogCat)
Oyentedeunaopcindelmen
contextual(BorrarContacto)
Borrarunelementodelalista
Creamosunatributoprivadoaniveldeclase,enelqueguardamoselndicedela
listaquehaseleccionadoelusuario(enAgenda.java)

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;
}
}

You might also like