Escolar Documentos
Profissional Documentos
Cultura Documentos
Class 11
Class 11
Class 11
to
d
o
s
h
o
w
E
v
e
n
ts
p
a
r
a
u
s
a
r
a
lis
ta
, e
m
v
e
z
d
a
c
a
ix
a
d
e
te
x
to
.
evLllsL.xml
AdapLadores
lmporL androld.wldgeL.SlmpleCursorAdapLer,
lmporL sLauc androld.provlder.8aseColumns._lu,
prlvaLe sLauc SLrlng[] l8CM = [ _lu, 1lML, 1l1LL, },
prlvaLe sLauc lnL[] 1C = [ 8.ld.rowld, 8.ld.ume, 8.ld.uLle, },
prlvaLe vold showLvenLs(Cursor cursor) [
SlmpleCursorAdapLer adapLer = new
SlmpleCursorAdapLer(Lhls, A.3)X$4&.!&0",
cursor, l8CM, 1C),
seLLlsLAdapLer(adapLer),
}
Precisamos de
um layout para
cada item de
lista.
LvenLLlsL.[ava
LayouLs 8elauvos
<?xml verslon="1.0" eocoJloq="oq-8"?>
<8elauveLayouL
xmlns:androld="bup.//scbemos.ooJtolJ.com/opk/tes/ooJtolJ"
androld:layouL_wldLh="fll_poteot"
androld:layouL_helghL="fll_poteot"
androld:orlenLauon="botlzootol"
androld:paddlng="10sp">
<1exLvlew
androld:ld="-lJ/towlJ"
androld:layouL_wldLh="wtop_cooteot"
androld:layouL_helghL="wtop_cooteot" />
<1exLvlew
androld:ld="-lJ/towlJcoloo"
androld:layouL_wldLh="wtop_cooteot"
androld:layouL_helghL="wtop_cooteot"
androld:LexL=". "
androld:layouL_Lo8lghLCf="lJ/towlJ" />
<1exLvlew
androld:ld="-lJ/ume"
androld:layouL_wldLh="wtop_cooteot"
androld:layouL_helghL="wtop_cooteot"
androld:layouL_Lo8lghLCf="lJ/towlJcoloo" />
<1exLvlew
androld:ld="-lJ/umecoloo"
androld:layouL_wldLh="wtop_cooteot"
androld:layouL_helghL="wtop_cooteot"
androld:LexL=". "
androld:layouL_Lo8lghLCf="lJ/ume" />
<1exLvlew
androld:ld="-lJ/utle"
androld:layouL_wldLh="fll_poteot"
androld:layouL_helghL="wtop_cooteot"
androld:elllpslze="eoJ"
androld:slngleLlne="ttoe"
androld:layouL_Lo8lghLCf="lJ/umecoloo" />
</8elauveLayouL>
O que um
layout
relativo?
O que ser
exibido em
cada linha da
lista?
E como deve
ser o layout da
lista em si?
lLem.xml
8ullL-ln lus
<?xml verslon="1.0" encodlng="u-"?>
<LlnearLayouL
xmlns:androld="hp://schemas.androld.com/apk/res/androld"
androld:layouL_wldLh="ll_parenL"
androld:layouL_helghL="ll_parenL">
<LlsLvlew
androld:ld="[),-%$!-V!-W3!(&"
androld:layouL_wldLh="wrap_conLenL"
androld:layouL_helghL="wrap_conLenL"/>
<1exLvlew
androld:ld="[),-%$!-V!-W0"#&X"
androld:layouL_wldLh="wrap_conLenL"
androld:layouL_helghL="wrap_conLenL"
androld:LexL="[(&%!,QW0"#&X" />
</LlnearLayouL>
Qual o papel
da textView
nesse layout?
Onde esses
IDs foram
declarados?
E
on
de foi
declarada
essa
con
stan
te?
evLllsL.xml
SLrlngs
?xml verslon="1.0" encodlng="u-"?>
<resources>
<sLrlng name="app_name">LvenLs</sLrlng>
<sLrlng name="empLy">no evenLs!</sLrlng>
</resources>
sLrlngs.xml
addLvenLs e geLLvenLs
Lsses meLodos so os mesmos usados em
nossa prlmelra lmplemenLao.
prlvaLe vold addLvenL(SLrlng sLrlng) [
SCLlLeuaLabase db = evenLs.geLWrlLableuaLabase(),
ConLenLvalues values = new ConLenLvalues(),
values.puL(1lML, SysLem.currenL1lmeMlllls()),
values.puL(1l1LL, sLrlng),
db.lnserLCr1hrow(1A8LL_nAML, null, values),
}
prlvaLe sLauc SLrlng C8uL8_8? = 1lML + " uLSC",
prlvaLe Cursor geLLvenLs() [
SCLlLeuaLabase db = evenLs.geL8eadableuaLabase(),
Cursor cursor = db
.query(1A8LL_nAML, l8CM, null, null, null, null, C8uL8_8?),
sLarLManaglngCursor(cursor),
reLurn cursor,
}
LvenLLlsL.[ava
LvenLLlsL.[ava
LlsLvlew vs Scrollvlew
A prlnclpal dlferena das duas abordagens
aconLece no meLodo showEvents.
prlvaLe vold showLvenLs(Cursor cursor) [
SlmpleCursorAdapLer adapLer = new
SlmpleCursorAdapLer(Lhls, 8.layouL.lLem,
cursor, l8CM, 1C),
seLLlsLAdapLer(adapLer),
}
prlvaLe vold showLvenLs(Cursor cursor) [
SLrlng8ullder bullder =
new SLrlng8ullder( "Saved evenLs:\n"),
whlle (cursor.move1onexL()) [
long ld = cursor.geLLong(0),
long ume = cursor.geLLong(1),
SLrlng uLle = cursor.geLSLrlng(2),
bullder.append(ld).append(": "),
bullder.append(ume).append(": "),
bullder.append(uLle).append("\n"),
}
1exLvlew LexL = (1exLvlew) ndvlew8yld(8.ld.LexL),
LexL.seL1exL(bullder),
}
Scrollvlew LlsLvlew
Lxerclclo: evenLos de Loque
Modlque LlsLLvenL
para que essa
auvldade Lambem
LraLe evenLos de Loque.
Lsses evenLos devem
ser dlsparados na Lela
de auvldade, mas no
pela llsLa.
LvenLos de 1oque
[Cverrlde
publlc boolean on1ouchLvenL(MouonLvenL evenL) [
lf (evenL.geLAcuon() != MouonLvenL.AC1lCn_uCWn) [
addLvenL("1ouch LvenL!"),
1oasL L1 = 1oasL.make1exL(Lhls, "1ouch!", 1oasL.LLn1P_SPC81),
L1.seLravlLy(ravlLy.CLn1L8, 0, 0),
L1.show(),
}
showLvenLs(geLLvenLs()),
reLurn Lrue,
}
LvenLLlsL.[ava
Menu de ConLexLo
Apagando itens
Adicione um menu de
contexto lista, que d
ao usurio a opo de
apagar um item da lista.
8eglsLrando o menu
[Cverrlde
publlc vold onCreaLe(8undle savedlnsLanceSLaLe) [
super.onCreaLe(savedlnsLanceSLaLe),
seLConLenLvlew(8.layouL.evLllsL),
evenLs = new LvenLsuaLa(Lhls),
%0Q!(&0%T$%2$,&0;&G0,4?Q0&>!(&Y!0S?PP8
Lry [
addLvenL("Pello, Androld!"),
Cursor cursor = geLLvenLs(),
showLvenLs(cursor),
} nally [
evenLs.close(),
}
}
LvenLLlsL.[ava
uenlndo o Menu
prlvaLe nal lnL del = 0,
[Cverrlde
publlc nal vold onCreaLeConLexLMenu
(nal ConLexLMenu menu, nal vlew v,
nal ConLexLMenulnfo menulnfo) [
super.onCreaLeConLexLMenu(menu, v, menulnfo),
menu.add(Menu.nCnL, del, Menu.nCnL, "uLL"),
}
LvenLLlsL.[ava
1raLando opes
publlc nal boolean onConLexLlLemSelecLed(nal MenulLem lLem) [
AdapLerConLexLMenulnfo lnfo =
(AdapLerConLexLMenulnfo) lLem.geLMenulnfo(),
8elauveLayouL rl = (8elauveLayouL)lnfo.LargeLvlew,
1exLvlew Lv = (1exLvlew)rl.geLChlldAL(0),
SLrlng sLrld = Lv.geL1exL().LoSLrlng(),
swlLch (lLem.geLlLemld()) [
case del:
SCLlLeuaLabase db = evenLs.geL8eadableuaLabase(),
db.deleLe(1A8LL_nAML, "_lu = " + sLrld, null),
showLvenLs(geLLvenLs()),
break,
}
reLurn Lrue,
}
LvenLLlsL.[ava
Adlclonando mals opes
Cancel
possvel que o usurio
mude de idia ao clicar
no item que precisa ser
removido. Adicione uma
opo CANCEL ao menu,
que lhe permita retornar
sem remover o item.
Cancel
prlvaLe nal lnL cancel = 1,
[Cverrlde
publlc nal vold onCreaLeConLexLMenu(nal ConLexLMenu menu, nal vlew v,
nal ConLexLMenulnfo menulnfo) [
super.onCreaLeConLexLMenu(menu, v, menulnfo),
menu.add(Menu.nCnL, del, Menu.nCnL, "uLL"),
menu.add(Menu.nCnL, cancel, Menu.nCnL, "CAnCLL"),
}
E como tratar
a escolha do
novo item?
LvenLLlsL.[ava
publlc nal boolean onConLexLlLemSelecLed(nal MenulLem lLem) [
AdapLerConLexLMenulnfo lnfo =
(AdapLerConLexLMenulnfo) lLem.geLMenulnfo(),
8elauveLayouL rl = (8elauveLayouL)lnfo.LargeLvlew,
1exLvlew Lv = (1exLvlew)rl.geLChlldAL(0),
SLrlng sLrld = Lv.geL1exL().LoSLrlng(),
swlLch (lLem.geLlLemld()) [
case del:
SCLlLeuaLabase db = evenLs.geL8eadableuaLabase(),
db.deleLe(1A8LL_nAML, "_lu = " + sLrld, null),
showLvenLs(geLLvenLs()),
break,
+)(0 +),+03V
:%0)Z8
}
reLurn Lrue,
}
LvenLLlsL.[ava
Lendo uma enLrada especlca
Visualizando itens
Adicione um terceiro
item ao seu menu. Esse
item, SHOW, dever
mostrar um item
selecionado. Use a sada
de Log para exibir
informaes sobre esse
item.
nova opo
prlvaLe nal lnL show = 2,
[Cverrlde
publlc nal vold onCreaLeConLexLMenu(nal ConLexLMenu menu, nal vlew v,
nal ConLexLMenulnfo menulnfo) [
super.onCreaLeConLexLMenu(menu, v, menulnfo),
menu.add(Menu.nCnL, del, Menu.nCnL, "uLL"),
menu.add(Menu.nCnL, show, Menu.nCnL, "SPCW"),
menu.add(Menu.nCnL, cancel, Menu.nCnL, "CAnCLL"),
}
Tratar esse
evento no
trivial.
Comece sendo
capaz de
selecionar o
item.
LvenLLlsL.[ava
Lendo um lLem especlco
publlc nal boolean onConLexLlLemSelecLed(nal MenulLem lLem) [
lf (lLem.geLlLemld() != cancel) [
AdapLerConLexLMenulnfo lnfo = (AdapLerConLexLMenulnfo) lLem.geLMenulnfo(),
8elauveLayouL rl = (8elauveLayouL) lnfo.LargeLvlew,
1exLvlew Lv = (1exLvlew) rl.geLChlldAL(0),
SLrlng sLrld = Lv.geL1exL().LoSLrlng(),
SCLlLeuaLabase db = evenLs.geL8eadableuaLabase(),
swlLch (lLem.geLlLemld()) [
case del:
db.deleLe(1A8LL_nAML, "_lu = " + sLrld, null),
break,
case show:
Cursor cursor = db
.query(1A8LL_nAML, l8CM, "_lu = " + sLrld, null, null, null, C8uL8_8?),
break,
}
showLvenLs(geLLvenLs()),
}
reLurn Lrue,
}
M
as, com
o ler
os dados do
cursor?
LvenLLlsL.[ava
Manlpulando o Cursor
case show:
Cursor cursor = db
.query(1A8LL_nAML, l8CM, "_lu = " + sLrld, null, null, null, C8uL8_8?),
Log.v("show", SLrlng.valueCf(cursor.geLColumnCounL())),
Log.v("show", cursor.geLColumnname(0)),
Log.v("show", cursor.geLColumnname(1)),
Log.v("show", cursor.geLColumnname(2)),
lnL umeColumn = cursor.geLColumnlndex(1lML),
lnL uLleColumn = cursor.geLColumnlndex(1l1LL),
cursor.move1ollrsL(),
SLrlng evenLSLr = cursor.geLSLrlng(uLleColumn),
evenLSLr += "(" + cursor.geLLong(umeColumn) + ")",
Log.v("show", evenLSLr),
break,
LvenLLlsL.[ava
Manlpulando o Cursor
case show:
Cursor cursor = db
.query(1A8LL_nAML, l8CM, "_lu = " + sLrld, null, null, null, C8uL8_8?),
Log.v("show", SLrlng.valueCf(cursor.geLColumnCounL())),
Log.v("show", cursor.geLColumnname(0)),
Log.v("show", cursor.geLColumnname(1)),
Log.v("show", cursor.geLColumnname(2)),
lnL umeColumn = cursor.geLColumnlndex(1lML),
lnL uLleColumn = cursor.geLColumnlndex(1l1LL),
cursor.move1ollrsL(),
SLrlng evenLSLr = cursor.geLSLrlng(uLleColumn),
evenLSLr += "(" + cursor.geLLong(umeColumn) + ")",
Log.v("show", evenLSLr),
break,
LvenLLlsL.[ava
prlvaLe sLauc nal lnL MAx_MLnu_lu = 0,
[Cverrlde
publlc boolean onCreaLeCpuonsMenu(Menu menu) [
menu.add(Menu.nCnL, MAx_MLnu_lu, Menu.nCnL, "eL CldesL"),
reLurn Lrue,
}
[Cverrlde
publlc boolean
onCpuonslLemSelecLed(MenulLem lLem) [
swlLch (lLem.geLlLemld()) [
case MAx_MLnu_lu:
C30%&7!)3$Q.14!3-0% :4!3-0% [ ,0S C30%&7!)3$Q.14!3-0%?&R!(P8
:4!3-0%.(0&G0(()Q0?@J$4 R)/0 (030+&0- ) "0,4\@P8
C30%&7!)3$Q )30%& [ :4!3-0%.+%0)&0?P8
alerL.show(),
reLurn Lrue,
defaulL:
,
}
reLurn false,
}
LvenLLlsL.[ava
O que esse
cdigo faz?
Esse um
exemplo de um
padro de
projetos. Qual?
Modique essa
aplicao, para ela
exibir na caixa o
evento mais
antigo.
Lendo o LvenLo mals Anugo
Modique essa
aplicao, para ela
exibir na caixa o
evento mais
antigo.
Comece criando um
mtodo getOldest, que
retorna o evento mais
antigo. Qual a
interface para esse
mtodo?
C LvenLo Mals Anugo
prlvaLe long geLCldesL(Cursor c) [
long oldesL1lme = 0L,
lnL umeColumn = c.geLColumnlndex(1lML),
for (c.move1ollrsL(), !c.lsLasL(), c.move1onexL()) [
long currenL1lme = c.geLLong(umeColumn),
lf (currenL1lme > oldesL1lme) [
oldesL1lme = currenL1lme,
}
}
reLurn oldesL1lme,
}
Implemente um
algoritmo que leia o
evento mais antigo
dentre os eventos
armazenados no
cursor.
E
c
o
m
o
in
c
o
r
p
o
r
a
r
e
s
s
e
c
d
ig
o
e
m
s
e
u
m
e
n
u
?
LvenLLlsL.[ava
Lxlblndo o LvenLo Mals Anugo
[Cverrlde
publlc boolean onCpuonslLemSelecLed(MenulLem lLem) [
swlLch (lLem.geLlLemld()) [
case MAx_MLnu_lu:
AlerLulalog.8ullder bullder = new AlerLulalog.8ullder(Lhls),
bullder.seLMessage("CldesL evenL = "
+ SLrlng.valueCf(geLCldesL(geLLvenLs()))),
AlerLulalog alerL = bullder.creaLe(),
alerL.show(),
reLurn Lrue,
defaulL:
,
}
reLurn false,
}
LvenLLlsL.[ava