Академический Документы
Профессиональный Документы
Культура Документы
Master CCI
Bertrand Estellon - DII - Aix-Marseille Universit
1
Organisation de l'enseignement
Objec fs:
Connatrelesdirentscomposantsd'uneapplica onAndroid
Savoirorganiseruneapplica on
Savoiru liserunedocumenta on
ProgresserenJava
valua on:
SeulslesTPserontvalus
IlestimportantdevenirtouslesTP
Lesnotessontindividuelles
Vousdevezdonctravaillerseul
2.1
Le projet
Unrveil:
2.2
Dmo du projet
2:16
2.3
Les fonctionnalits du projet
Ajoutd'unealarme
Modica ondel'heuredesalarmes
Ac va on/Dsac va ond'unealarme
Suppressiond'unealarme
No ca ondel'u lisa on
Sonneriedel'alarme
Rveildel'cranencasdesonnerie
Possibilitd'arrterl'alarme
2.4
Les outils pour dvelopper sur Android
Nousdevonsu liserleSDKd'Androidquifournit:
leslibrairiesJavad'Android
unmulateurpourtestervosapplica ons
desimagesdusystmeAndroid
Nousdevonsu liserJavadoncilfaut:
Matriserlesconceptsdelaprogramma onobjet
Savoirlireunedocumenta onJava
Nousdevonsu liserunIDEadapt,c'estdire,AndroidStudio:
PremiretapeduTP,lacongura ondel'IDE
IlestbassurIntelliJIDEAdeJetBrains
2.5
Android Studio
2.6
Android SDK
2.7
AVD Manager
2.8
mulateur
2.9
Installation
5:20
2 . 10
Cration d'une machine virtuelle
1:13
2 . 11
Cration d'un projet
1:51
2 . 12
Les composants d'une application
Ac vits:lesdirentscransdel'applica on
Services:uncomposantquis'excuteentchedefond
Fournisseurdecontenu:ges onetpartagedesdonnes
Receveurdebroadcasts:recep ondeno ca ons
FireActivity
AlarmActivity
AlarmProvider
FireService
UpdateBroadcastReceiver
2 . 13
Scurit dans le systme Android
Chaqueapplica onestexcutedansunesandbox(bacsable):
AndroidestsystmeLinuxmul u lisateur
Chaqueapplica onestunu lisateurdirent
Chaquechierdel'applica onn'estaccessiblequeparelle
Pardfaut,chaqueprocessuspossdesamachinevirtuelle
Chaqueapplica onasonpropreprocessusLinux
2 . 14
Communication entre composants
Lesac vits,lesservicesetlesreceveursdebroadcastssont
ac vspardesmessagesasynchrones:lesintents
I n t e n t i n t e n t = n e w I n t e n t ( c o n t e x t , F i r e S e r v i c e . c l a s s )
i n t e n t . s e t A c t i o n ( F i r e S e r v i c e . A C T I O N _ F I R E ) ;
Lesfournisseursdecontenusontac vspardesrequtes
eectuesl'aided'unrsolveurdecontenu.
Unerequteestcompose:
d'uneURIdelaforme content://authority/path
d'uneac on query, delete, updateou insert
U r i u r i = U r i . p a r s e ( " c o n t e n t : / / f r . u n i v _ a m u . c c i . a l a r m / a l a r m s " ) ;
r e s o l v e r . i n s e r t ( u r i , v a l u e s ) ;
c u r s o r = r e s o l v e r . q u e r y ( u r i , n u l l , n u l l , n u l l , n u l l ) ;
2 . 15
Quelques classes d'Android
Cursor
Intent
Activity
ContentProvider
Service
BroadcastReceiver
ContentResolver
View
2 . 16
Structure d'un projet
Manifeste
CodeJava
Ressources
Scriptsdecompilation
2 . 17
Manifeste d'une application
< m a n i f e s t x m l n s : a n d r o i d = " h t t p : / / s c h e m a s . a n d r o i d . c o m / a p k / r e s / a n d r o i d "
p a c k a g e = " c o m . u n i v _ a m u . c c i . c o m . a l a r m " >
< u s e s - p e r m i s s i o n a n d r o i d : n a m e = " a n d r o i d . p e r m i s s i o n . R E C E I V E _ B O O T _ C O M P L E T E D " / >
< a p p l i c a t i o n a n d r o i d : i c o n = " @ m i p m a p / i c _ l a u n c h e r "
a n d r o i d : l a b e l = " @ s t r i n g / a p p _ n a m e " >
< a c t i v i t y a n d r o i d : n a m e = " c o m . u n i v _ a m u . c c i . a l a r m . v i e w s . A l a r m A c t i v i t y " >
< i n t e n t - f i l t e r >
< a c t i o n a n d r o i d : n a m e = " a n d r o i d . i n t e n t . a c t i o n . M A I N " / >
< c a t e g o r y a n d r o i d : n a m e = " a n d r o i d . i n t e n t . c a t e g o r y . L A U N C H E R " / >
< / i n t e n t - f i l t e r >
< / a c t i v i t y >
< p r o v i d e r a n d r o i d : a u t h o r i t i e s = " c o m . u n i v _ a m u . c c i . a l a r m "
a n d r o i d : n a m e = " c o m . u n i v _ a m u . c c i . a l a r m . m o d e l . A l a r m P r o v i d e r " / >
< s e r v i c e a n d r o i d : n a m e = " c o m . u n i v _ a m u . c c i . a l a r m . s e r v i c e . F i r e S e r v i c e " / >
< r e c e i v e r
a n d r o i d : n a m e = " c o m . u n i v _ a m u . c c i . a l a r m . s e r v i c e . U p d a t e B r o a d c a s t R e c e i v e r " >
< i n t e n t - f i l t e r >
< a c t i o n a n d r o i d : n a m e = " a n d r o i d . i n t e n t . a c t i o n . B O O T _ C O M P L E T E D " / >
< / i n t e n t - f i l t e r >
< / r e c e i v e r >
< / a p p l i c a t i o n >
< / m a n i f e s t >
2 . 18
Une activit :
p u b l i c c l a s s M a i n A c t i v i t y e x t e n d s A c t i v i t y {
@ O v e r r i d e
p r o t e c t e d v o i d o n C r e a t e ( B u n d l e s a v e d I n s t a n c e S t a t e ) {
s u p e r . o n C r e a t e ( s a v e d I n s t a n c e S t a t e ) ;
R e l a t i v e L a y o u t l a y o u t = n e w R e l a t i v e L a y o u t ( t h i s ) ;
T e x t V i e w t e x t = n e w T e x t V i e w ( t h i s ) ;
t e x t . s e t T e x t ( " H e l l o W o r l d ! " ) ;
l a y o u t . a d d V i e w ( t e x t ) ;
s e t C o n t e n t V i e w ( l a y o u t ) ;
}
}
3.1
Dclaration de l'activit dans le manifeste
< m a n i f e s t x m l n s : a n d r o i d = " h t t p : / / s c h e m a s . a n d r o i d . c o m / a p k / r e s / a n d r o i d "
p a c k a g e = " c o m . c c i . c a l c u l a t o r " >
< a p p l i c a t i o n
a n d r o i d : a l l o w B a c k u p = " t r u e "
a n d r o i d : i c o n = " @ d r a w a b l e / i c _ l a u n c h e r "
a n d r o i d : l a b e l = " @ s t r i n g / a p p _ n a m e "
a n d r o i d : t h e m e = " @ s t y l e / A p p T h e m e " >
< a c t i v i t y
a n d r o i d : n a m e = " . M a i n A c t i v i t y "
a n d r o i d : l a b e l = " @ s t r i n g / a p p _ n a m e " >
< i n t e n t - f i l t e r >
< a c t i o n a n d r o i d : n a m e = " a n d r o i d . i n t e n t . a c t i o n . M A I N " / >
< c a t e g o r y a n d r o i d : n a m e = " a n d r o i d . i n t e n t . c a t e g o r y . L A U N C H E R " / >
< / i n t e n t - f i l t e r >
< / a c t i v i t y >
< / a p p l i c a t i o n >
< / m a n i f e s t >
3.2
Le rsultat :
3.3
Cycle de vie d'une activit :
Aucunemthode maindansunprogrammeAndroid
Androidexcutelecoded'uneac vitenappelantdescallbacks
Cescallbackscorrespondentauxphrasesdelavied'uneac vit
Iln'estpasncessaired'implmentertouteslescallbacks
3.4
tats durables d'une activit
Resumed
L'ac vitestaupremierplanetl'u lisateurpeutinteragiravecelle
Onditaussiqu'elleestentraind'treexcute
Paused
L'ac vitestpar ellementrecouverteparuneautreac vitquise
trouveaupremierplan
L'ac vitenpausenepeutpasrecevoird'ac ondel'u lisateur
Stopped
L'ac vitesttotalementcacheetnepeutplusexcutedecode
Toutessesinforma onssontconserves
3.5
tats transitoires d'une activit
Created
L'ac vitvientd'trecre.
Started
L'ac vitvientdedevenirvisible.
3.6
Les callbacks
p u b l i c c l a s s E x a m p l e A c t i v i t y e x t e n d s A c t i v i t y {
@ O v e r r i d e
p u b l i c v o i d o n C r e a t e ( B u n d l e s a v e d I n s t a n c e S t a t e ) { / * . . . * / }
@ O v e r r i d e
p r o t e c t e d v o i d o n S t a r t ( ) { / * . . . * / }
@ O v e r r i d e
p r o t e c t e d v o i d o n R e s u m e ( ) { / * . . . * / }
@ O v e r r i d e
p r o t e c t e d v o i d o n P a u s e ( ) { / * . . . . * / }
@ O v e r r i d e
p r o t e c t e d v o i d o n S t o p ( ) { / * . . . * / }
@ O v e r r i d e
p r o t e c t e d v o i d o n D e s t r o y ( ) { / * . . . * / }
}
3.7
Cycle de vie des activits
3.8
Mise en pause et reprise de l'activit
p u b l i c c l a s s M a i n A c t i v i t y e x t e n d s A c t i v i t y {
@ O v e r r i d e
p r o t e c t e d v o i d o n R e s u m e ( ) {
s u p e r . o n R e s u m e ( ) ;
o p e n C a m e r a ( ) ;
}
@ O v e r r i d e
p r o t e c t e d v o i d o n P a u s e ( ) {
s u p e r . o n P a u s e ( ) ;
r e a l e a s e C a m e r a ( ) ;
}
3.9
Sauvegarde de l'tat de l'application
L'applica onestdtruitedanslestatsrouges:
@ O v e r r i d e
p r o t e c t e d v o i d o n C r e a t e ( B u n d l e s a v e d I n s t a n c e S t a t e ) {
s u p e r . o n C r e a t e ( s a v e d I n s t a n c e S t a t e ) ;
L i n e a r L a y o u t l a y o u t = n e w L i n e a r L a y o u t ( t h i s ) ;
b u t t o n = n e w B u t t o n ( t h i s ) ;
b u t t o n . s e t O n C l i c k L i s t e n e r ( n e w O n C l i c k L i s t e n e r ( ) ) ;
u p d a t e B u t t o n L a b e l ( ) ;
l a y o u t . a d d V i e w ( b u t t o n ) ;
s e t C o n t e n t V i e w ( l a y o u t ) ;
}
p u b l i c v o i d u p d a t e B u t t o n L a b e l ( ) { b u t t o n . s e t T e x t ( " " + v a l u e ) ; }
p r i v a t e c l a s s O n C l i c k L i s t e n e r i m p l e m e n t s V i e w . O n C l i c k L i s t e n e r {
@ O v e r r i d e
p u b l i c v o i d o n C l i c k ( V i e w v ) { v a l u e + + ; u p d a t e B u t t o n L a b e l ( ) ; }
}
}
3 . 11
Sauvegarde de l'tat de l'application
3 . 12
Sauvegarde de l'tat de l'application
3 . 13
Sauvegarde de l'tat de l'application
p u b l i c c l a s s M a i n A c t i v i t y e x t e n d s A c t i v i t y {
/ * . . . * /
@ O v e r r i d e
p r o t e c t e d
v o i d o n R e s t o r e I n s t a n c e S t a t e ( B u n d l e s a v e d I n s t a n c e S t a t e ) {
s u p e r . o n R e s t o r e I n s t a n c e S t a t e ( s a v e d I n s t a n c e S t a t e ) ;
v a l u e = s a v e d I n s t a n c e S t a t e . g e t I n t ( " v a l u e " ) ;
u p d a t e B u t t o n L a b e l ( ) ;
}
@ O v e r r i d e
p r o t e c t e d v o i d o n S a v e I n s t a n c e S t a t e ( B u n d l e o u t S t a t e ) {
s u p e r . o n S a v e I n s t a n c e S t a t e ( o u t S t a t e ) ;
o u t S t a t e . p u t I n t ( " v a l u e " , v a l u e ) ;
}
}
3 . 14
Les Bundles
LesBundlespeuventassocierdeschanesdecaractresdes:
destypessimples:en ers,o ants,caractres...
deschanesdecaractres
destableauxetdeslistes
desobjetsParcelable
Quelquesremarques:
UnBundleestParcelable
UnobjetParcelablepeuttrecritdansunobjetParcel
UnParcelestunconteneurpourunmessage
3 . 15
Quelques mthodes de la classe Bundle
putInt(String key, int value)
Dansce eexemple:
RelativeLayouttend ViewGroup
ViewGrouptend View
TextViewtend View
4.2
Les classes View et ViewGroup
Unevueestuneclassequitend View
Unevuepeuttredessinel'cran
Ungroupedevuetend ViewGroupetdonc View
Ungroupedevuespeutcontenird'autresvues
Ungroupedevuesorganisel'achagedesvuesqu'ilcon ent
setContentViewde Activitypourprciserlavueacher
4.3
Hirarchie des vues
4.4
Construction d'une vue en Java
p u b l i c c l a s s M a i n A c t i v i t y e x t e n d s A c t i v i t y {
p r o t e c t e d v o i d o n C r e a t e ( B u n d l e s a v e d I n s t a n c e S t a t e ) {
s u p e r . o n C r e a t e ( s a v e d I n s t a n c e S t a t e ) ;
R e l a t i v e L a y o u t r e l a t i v e L a y o u t = c r e a t e R e l a t i v e L a y o u t ( ) ;
s e t C o n t e n t V i e w ( r e l a t i v e L a y o u t ) ;
}
p r i v a t e R e l a t i v e L a y o u t c r e a t e R e l a t i v e L a y o u t ( ) {
R e l a t i v e L a y o u t r e l a t i v e L a y o u t = n e w R e l a t i v e L a y o u t ( t h i s ) ;
r e l a t i v e L a y o u t . s e t P a d d i n g ( 1 6 , 1 6 , 1 6 , 1 6 ) ;
r e l a t i v e L a y o u t . a d d V i e w ( c r e a t e V e r t i c a l L a y o u t ( ) ) ;
r e t u r n r e l a t i v e L a y o u t ;
}
p r i v a t e L i n e a r L a y o u t c r e a t e V e r t i c a l L a y o u t ( ) {
L i n e a r L a y o u t v e r t i c a l L a y o u t = n e w L i n e a r L a y o u t ( t h i s ) ;
v e r t i c a l L a y o u t . s e t O r i e n t a t i o n ( L i n e a r L a y o u t . V E R T I C A L ) ;
v e r t i c a l L a y o u t . s e t L a y o u t P a r a m s (
n e w R e l a t i v
s ( V i e L a y o u t . L a y o u t P a r a m e w G r o u p . L a y o u t P a r a m s . M A T C H _ P A R E N T ,
V i e w G r o u p . L a y o u t P a r a m s . M A T C H _ P A R E N T ) ) ;
v e r t i c a l L a y o u t . a d d V i e w ( c r e a t e T e x t V i e w ( ) ) ;
v e r t i c a l L a y o u t . a d d V i e w ( c r e a t e H o r i z o n t a l L a y o u t ( ) ) ;
r e t u r n v e r t i c a l L a y o u t ;
}
}
4.5
Construction d'une vue en Java
p u b l i c c l a s s M a i n A c t i v i t y e x t e n d s A c t i v i t y {
/ * . . . * /
p r i v a t e T e x t V i e w c r e a t e T e x t V i e w ( ) {
T e x t V i e w t e x t V i e w = n e w T e x t V i e w ( t h i s ) ;
t e x t V i e w . s e t L a y o u t P a r a m s ( n e w L i n e a r L a y o u t . L a y o u t P a r a m s (
V i e w G r o u p . L a y o u t P a r a m s . M A T C H _ P A R E N T , 0 , 1 . 0 f ) ) ;
t e x t V i e w . s e t G r a v i t y ( G r a v i t y . C E N T E R ) ;
t e x t V i e w . s e t T e x t S i z e ( 5 0 ) ;
t e x t V i e w . s e t T e x t ( " T e x t V i e w " ) ;
r e t u r n t e x t V i e w ;
}
p r i v a t e L
i n e a r L a y o u t c r e a t e H o r i z o n t a l L a y o u t ( ) {
L i n e a r L
a y o u t h o r i z o n t a l L a y o u t = n e w L i n e a r L a y o u t ( t h i s ) ;
h o r i z o n
t a l L a y o u t . s e t O r i e n t a t i o n ( L i n e a r L a y o u t . H O R I Z O N T A L ) ;
h o r i z o n
t a l L a y o u t . s e t L a y o u t P a r a m s (
n e w L
i n e a r L a y o u t . L a y o u t P a r a m s (
V i e w G r o u p . L a y o u t P a r a m s . M A T C H _ P A R E N T , 0 , 1 . 0 f ) ) ;
h o r i z o n t a l L a y o u t . a d d V i e w ( c r e a t e B u t t o n ( ) ) ;
h o r i z o n t a l L a y o u t . a d d V i e w ( c r e a t e B u t t o n ( ) ) ;
r e t u r n h o r i z o n t a l L a y o u t ;
}
4.6
Construction d'une vue en Java
p u b l i c c l a s s M a i n A c t i v i t y e x t e n d s A c t i v i t y {
/ * . . . * /
p r i v a t e B u
t t o n c r e a t e B u t t o n ( ) {
B u t t o n b
u t t o n = n e w B u t t o n ( t h i s ) ;
b u t t o n . s
e t L a y o u t P a r a m s ( n e w L i n e a r L a y o u t . L a y o u t P a r a m s (
0 , V i e w G r o u p . L a y o u t P a r a m s . M A T C H _ P A R E N T , 1 . 0 f ) ) ;
b u t t o n . s e t T e x t ( " B u t t o n " ) ;
r e t u r n b u t t o n ;
}
4.7
Les vnements
Onajoutedescouteursauxvuespourcouterlesvnements:
p u b l i c c l a s s M a i n A c t i v i t y e x t e n d s A c t i v i t y {
p u b l i c i n t c o u n t = 0 ;
@ O v e r r i d e
p r o t e c t e d v o i d o n C r e a t e ( B u n d l e s a v e d I n s t a n c e S t a t e ) {
s u p e r . o n C r e a t e ( s a v e d I n s t a n c e S t a t e ) ;
B u t t o n b u t t o n = n e w B u t t o n ( t h i s ) ;
b u t t o n . s e t O n C l i c k L i s t e n e r ( n e w M y O n C l i c k L i s t e n e r ( t h i s ) ) ;
s e t C o n t e n t V i e w ( b u t t o n ) ;
}
}
4.8
Les couteurs
Lamthode setOnClickListenerprendenparamtreunobjetqui
implmentel'interface View.OnClickListener:
p u b l i c i n t e r f a c e O n C l i c k L i s t e n e r {
v o i d o n C l i c k ( V i e w v i e w ) ;
}
Uneinterfaceestassociechaquetyped'vnements
Onobservelesvnementsenconnectantdeslisteners
Pourcela,onu liselesmthodes setOn*Listener
Ensuite,unvnemententranel'appeld'unemthodede
l'interfacesurl'objetquevousavezconnectlavue
4.9
Implmentation avec une classe classique
c l a s s M y O n C l i c k L i s t e n e r i m p l e m e n t s V i e w . O n C l i c k L i s t e n e r {
p r i v a t e M a i n A c t i v i t y m a i n A c t i v i t y ;
p u b l i c M y O n C l i c k L i s t e n e r ( M a i n A c t i v i t y m a i n A c t i v i t y ) {
t h i s . m a i n A c t i v i t y = m a i n A c t i v i t y ;
}
@ O v e r r i d e
p u b l i c v o i d o n C l i c k ( V i e w v ) {
m a i n A c t i v i t y . c o u n t + + ;
}
}
4 . 10
Implmentation avec une classe interne
p u b l i c c l a s s M a i n A c t i v i t y e x t e n d s A c t i v i t y {
p u b l i c i n t c o u n t = 0 ;
@ O v e r r i d e
p r o t e c t e d v o i d o n C r e a t e ( B u n d l e s a v e d I n s t a n c e S t a t e ) {
/ * . . . * /
b u t t o n . s e t O n C l i c k L i s t e n e r ( n e w M y O n C l i c k L i s t e n e r ( ) ) ;
/ * . . . * /
}
c l a s s M y O n C l i c k L i s t e n e r i m p l e m e n t s V i e w . O n C l i c k L i s t e n e r {
@ O v e r r i d e
p u b l i c v o i d o n C l i c k ( V i e w v ) { c o u n t + + ; }
}
}
4 . 11
Implmentation avec une classe anonyme
p u b l i c c l a s s M a i n A c t i v i t y e x t e n d s A c t i v i t y {
p u b l i c i n t c o u n t = 0 ;
@ O v e r r i d e
p r o t e c t e d v o i d o n C r e a t e ( B u n d l e s a v e d I n s t a n c e S t a t e ) {
s u p e r . o n C r e a t e ( s a v e d I n s t a n c e S t a t e ) ;
B u t t o n b u t t o n = n e w B u t t o n ( t h i s ) ;
b u t t o n . s e t O n C l i c k L i s t e n e r ( n e w V i e w . O n C l i c k L i s t e n e r ( ) {
@ O v e r r i d e
p u b l i c v o i d o n C l i c k ( V i e w v ) { c o u n t + + ; }
} ) ;
s e t C o n t e n t V i e w ( b u t t o n ) ;
}
}
4 . 12
Les ressources
ellessontendehorsducodeetcon ennent
lesimages
leschanesdecaractres
lesmodlesd'interfacesu lisateur
lesanima ons...
ellessontchoisiesenfonc ondelacongura on:
tailledel'cran
orienta ondel'cran
langue...
demaintenirceslmentssansconnatreJava.
5.1
Les ressources
Ellessontdanslessousrpertoiresdurpertoire res
5.2
La classe R
Elleestgnreautoma quementparAndroid
EllepermetdedsignerlesressourcesdanslecodeJava
Parexemple, activity_main.xml= R.layout.activity_main
5.3
Les layouts
Lamthode setContentViewpeutprendrel'iden antd'unlayout:
p u b l i c c l a s s M a i n A c t i v i t y e x t e n d s A c t i v i t y {
@ O v e r r i d e
p r o t e c t e d v o i d o n C r e a t e ( B u n d l e s a v e d I n s t a n c e S t a t e ) {
s u p e r . o n C r e a t e ( s a v e d I n s t a n c e S t a t e ) ;
s e t C o n t e n t V i e w ( R . l a y o u t . a c t i v i t y _ m a i n ) ;
}
}
Lecontenuduchier activity_main.xml:
< R e l a t i v e L a y o u t
x m l n s : a n d r o i d = " . . . "
a n d r o i d : l a y o u t _ w i d t h = " m a t c h _ p a r e n t "
a n d r o i d : l a y o u t _ h e i g h t = " m a t c h _ p a r e n t " >
< T
e x t V i e w
a n d r o i d : l a y o u t _ w i d t h = " w r a p _ c o n t e n t "
a n d r o i d : l a y o u t _ h e i g h t = " w r a p _ c o n t e n t "
a n d r o i d : t e x t S i z e = " 1 0 0 d p "
a n d r o i d : t e x t = " H e l l o W o r l d ! " / >
< / R e l a t i v e L a y o u t >
5.4
Les layouts
Lecontenuduchier activity_main.xml:
< R e l a t i v e L a y o u t
x m l n s : a n d r o i d = " . . . "
a n d r o i d : l a y o u t _ w i d t h = " m a t c h _ p a r e n t "
a n d r o i d : l a y o u t _ h e i g h t = " m a t c h _ p a r e n t " >
< T
e x t V i e w
a n d r o i d : l a y o u t _ w i d t h = " w r a p _ c o n t e n t "
a n d r o i d : l a y o u t _ h e i g h t = " w r a p _ c o n t e n t "
a n d r o i d : t e x t S i z e = " 1 0 0 d p "
a n d r o i d : t e x t = " H e l l o W o r l d ! " / >
< / R e l a t i v e L a y o u t >
5.5
Les chanes de caractres
Pourfaciliterlatraduc ondesapplica ons,ilestprfrabled'u liser
desrfrencesdeschanesdecaractresdanslesprogrammesou
leslayouts:
< R e l a t i v e L a y o u t
x m l n s : a n d r o i d = " . . . "
a n d r o i d : l a y o u t _ w i d t h = " m a t c h _ p a r e n t "
a n d r o i d : l a y o u t _ h e i g h t = " m a t c h _ p a r e n t " >
< T e x t V i e w
a n d r o i d : l a y o u t _ w i d t h = " w r a p _ c o n t e n t "
a n d r o i d : l a y o u t _ h e i g h t = " w r a p _ c o n t e n t "
a n d r o i d : t e x t = " @ s t r i n g / h e l l o _ w o r l d " / >
< / R e l a t i v e L a y o u t >
5.6
Les chanes de caractres
Ellessetrouventdanslechier strings.xml:
< r e s o u r c e s >
< s t r i n g n a m e = " h e l l o _ w o r l d " > H e l l o w o r l d ! < / s t r i n g >
< / r e s o u r c e s >
PouraccderauxchanesdecaractresenXML:
< R e l a t i v e L a y o u t . . . >
< T e x t V i e w . . .
a n d r o i d : t e x t = " @ s t r i n g / h e l l o _ w o r l d " / >
< / R e l a t i v e L a y o u t >
5.7
Les chanes de caractres
p u b l i c c l a s s M a i n A c t i v i t y e x t e n d s A c t i v i t y {
@ O v e r r i d e
p r o t e c t e d v o i d o n C r e a t e ( B u n d l e s a v e d I n s t a n c e S t a t e ) {
s u p e r . o n C r e a t e ( s a v e d I n s t a n c e S t a t e ) ;
R e l a t i v e L a y o u t l a y o u t = n e w R e l a t i v e L a y o u t ( t h i s ) ;
T e x t V i e w t e x t = n e w T e x t V i e w ( t h i s ) ;
C o n t e x t c o n t e x t = t h i s ;
t e x t . s e t T e x t ( R . s t r i n g . h e l l o _ w o r l d ) ;
/ * S t r i n g h e l l o W o r l d =
c o n t e x t . g e t R e s o u r c e s ( ) . g e t T e x t ( R . s t r i n g . h e l l o _ w o r l d ) ;
t e x t . s e t T e x t ( h e l l o W o r l d ) ; * /
l a y o u t . a d d V i e w ( t e x t ) ;
s e t C o n t e n t V i e w ( l a y o u t ) ;
}
}
5.8
Les rfrences
SyntaxepourdsigneruneressourcedansundocumentXML
@ [ < p a c k a g e _ n a m e > : ] < r e s o u r c e _ t y p e > / < r e s o u r c e _ n a m e >
o
<package_name>estlenomdupaquet
<resource_type>estletypedelaressource
<resource_name>est
lenomduchierquicon entlaressource
oulavaleurdel'a ribut android:named'unlmentXML
< I m a g e V i e w
a n d r o i d : c o n t e n t D e s c r i p t i o n = " @ a n d r o i d : s t r i n g / o k "
a n d r o i d : s r c = " @ d r a w a b l e / i c _ l a u n c h e r " / >
5.9
Les dimensions
< R e l a t i v e L a y o u t x m l n s : a n d r o i d = " . . . "
x m l n s : t o o l s = " h t t p : / / s c h e m a s . a n d r o i d . c o m / t o o l s "
a n d r o i d : l a y o u t _ w i d t h = " m a t c h _ p a r e n t "
a n d r o i d : l a y o u t _ h e i g h t = " m a t c h _ p a r e n t "
a n d r o i d : p a d d i n g L e f t = " @ d i m e n / a c t i v i t y _ h o r i z o n t a l _ m a r g i n "
a n d r o i d : p a d d i n g R i g h t = " @ d i m e n / a c t i v i t y _ h o r i z o n t a l _ m a r g i n "
a n d r o i d : p a d d i n g T o p = " @ d i m e n / a c t i v i t y _ v e r t i c a l _ m a r g i n "
a n d r o i d : p a d d i n g B o t t o m = " @ d i m e n / a c t i v i t y _ v e r t i c a l _ m a r g i n " >
< / R e l a t i v e L a y o u t >
Lesdimensionssontdniesdanslechier dimens.xml:
< r e s o u r c e s >
< d i m e n n a m e = " a c t i v i t y _ h o r i z o n t a l _ m a r g i n " > 1 6 d p < / d i m e n >
< d i m e n n a m e = " a c t i v i t y _ v e r t i c a l _ m a r g i n " > 1 6 d p < / d i m e n >
< / r e s o u r c e s >
Ilestgalementpossibled'accderauxdimensionsenJava:
f l o a t d i m e n s i o n = g e t R e s o u r c e s ( ) . g e t D i m e n s i o n (
R . d i m e n . a c t i v i t y _ h o r i z o n t a l _ m a r g i n ) ;
5 . 10
Prise en charge des diffrentes configurations
Ilestpossibledednirdesressourcesenfonc onde:
l'orienta onduterminal
larsolu on
latailledel'cran
laversiondel'API
delalangue,etc.
Parexemple:
values/dimens.xml:dimensionspardfaut
values-w820dp/dimens.xml:dim.pourdescransde820p
layout:leslayoutspardfaut
layout-land:lesversionspaysagedeslayouts
values-fr/strings.xml:chanesenfranais
5 . 11
Les images
Ilestpossibledestockerdesimagesdanslesressources
Lesimagespeuventtrestockessousdirentesrsolu ons
Larsolu onestchoisieenfonc onduterminaldel'u lisateur
5 . 12
Les images
< I m a g e B u t t o n
a n d r o i d : i d = " @ + i d / b u t t o n "
a n d r o i d : l a y o u t _ w i d t h = " w r a p _ c o n t e n t "
a n d r o i d : l a y o u t _ h e i g h t = " w r a p _ c o n t e n t "
a n d r o i d : c o n t e n t D e s c r i p t i o n = " @ s t r i n g / c o u n t "
a n d r o i d : s r c = " @ d r a w a b l e / i c _ l a u n c h e r "
a n d r o i d : o n C l i c k = " c o u n t " / >
5 . 13
Les images
Ondsigneuneimageparsoniden ant:
p u b l i c c l a s s M a i n A c t i v i t y e x t e n d s A c t i v i t y {
p r o t e c t e d v o i d o n C r e a t e ( B u n d l e s a v e d I n s t a n c e S t a t e ) {
s u p e r . o n C r e a t e ( s a v e d I n s t a n c e S t a t e ) ;
g e t W i n d o w ( ) . s e t B a c k g r o u n d D r a w a b l e R e s o u r c e (
R . d r a w a b l e . i c _ l a u n c h e r ) ;
I m a g e V i e w i m a g e = ( I m a g e V i e w ) f i n d V i e w B y I d ( R . i d . i m a g e ) ;
i m a g e . s e t I m a g e R e s o u r c e ( R . d r a w a b l e . i c _ l a u n c h e r ) ;
}
5 . 14
Les images
unDrawabledcritparunchierXML:
< r i p p l e x m l n s : a n d r o i d = " . . . "
a n d r o i d : c o l o r = " ? a n d r o i d : c o l o r C o n t r o l H i g h l i g h t " >
< i t e m >
< sh a p e a n d r o i d : s h a p e = " o v a l " >
< s o l i d a n d r o i d : c o l o r = " ? a n d r o i d : c o l o r A c c e n t " / >
< / s h a p e >
< / i t e m >
< / r i p p l e >
quichangeavecl'tatdel'lmentsurlequelilestu lis:
< s e l e c t o r x m l n s : a n d r o i d = " . . . " >
< i t e m
a n d r o i d : s t a t e _ s e l e c t e d = " t r u e "
a n d r o i d : d r a w a b l e = " @ d r a w a b l e / s e l e c t e d _ n o t e _ b a c k g r o u n d " / >
< i t e m
a n d r o i d : d r a w a b l e = " @ d r a w a b l e / n o r m a l _ n o t e _ b a c k g r o u n d " / >
< / s e l e c t o r >
5 . 15
Les couleurs
Contenuduchier res/color/button_text.xml:
< s e l e c t o r
x m l n s : a n d r o i d = " . . . " >
< i t e m a n d r o i d : s t a t e _ p r e s s e d = " t r u e "
a n d r o i d : c o l o r = " # f f f f 0 0 0 0 " / > < ! - - p r e s s e d - - >
< i t e m a n d r o i d : s t a t e _ f o c u s e d = " t r u e "
a n d r o i d : c o l o r = " # f f 0 0 0 0 f f " / > < ! - - f o c u s e d - - >
< i t e m a n d r o i d : c o l o r = " # f f 0 0 0 0 0 0 " / > < ! - - d e f a u l t - - >
< / s e l e c t o r >
5 . 16
Les animations
< s e l e c t o r x m l n s : a n d r o i d = " h t t p : / / s c h e m a s . a n d r o i d . c o m / a p k / r e s / a n d r o i d " >
< i t e m a n d r o i d : s t a t e _ p r e s s e d = " t r u e " >
< o b j e c t A n i m a t o r
a n d r o i d : p r o p e r t y N a m e = " t r a n s l a t i o n Z "
a n d r o i d : d u r a t i o n = " @ a n d r o i d : i n t e g e r / c o n f i g _ s h o r t A n i m T i m e "
a n d r o i d : v a l u e F r o m = " @ d i m e n / e l e v a t i o n _ l o w "
a n d r o i d : v a l u e T o = " @ d i m e n / e l e v a t i o n _ h i g h "
a n d r o i d : v a l u e T y p e = " f l o a t T y p e " / >
< / i t e m >
< i t e m >
< o b j e c t A n i m a t o r
a n d r o i d : p r o p e r t y N a m e = " t r a n s l a t i o n Z "
a n d r o i d : d u r a t i o n = " @ a n d r o i d : i n t e g e r / c o n f i g _ s h o r t A n i m T i m e "
a n d r o i d : v a l u e F r o m = " @ d i m e n / e l e v a t i o n _ h i g h "
a n d r o i d : v a l u e T o = " @ d i m e n / e l e v a t i o n _ l o w "
a n d r o i d : v a l u e T y p e = " f l o a t T y p e " / >
< / i t e m >
< / s e l e c t o r >
5 . 17
Les styles
Dni ond'unstylepar rd'unautrestyle:
< r e s o u r c e s >
< s t y l e n a m e = " A p p T h e m e "
p a r e n t = " a n d r o i d : T h e m e . M a t e r i a l . L i g h t . D a r k A c t i o n B a r " >
< i t e m n a m e = " a n d r o i d : c o l o r P r i m a r y " >
@ a n d r o i d : c o l o r / h o l o _ b l u e _ l i g h t
< / i t e m >
< i t e m n a m e = " a n d r o i d : c o l o r P r i m a r y D a r k " >
@ a n d r o i d : c o l o r / h o l o _ b l u e _ d a r k
< / i t e m >
< i t e m n a m e = " a n d r o i d : t e x t C o l o r " >
@ a n d r o i d : c o l o r / b l a c k
< / i t e m >
< ! - - . . . - - >
< / s t y l e >
< / r e s o u r c e s >
5 . 18
Les styles
U lisa ondustyledanslemanifestedel'applica on:
< m a n i f e s t x m l n s : a n d r o i d = " h t t p : / / s c h e m a s . a n d r o i d . c o m / a p k / r e s / a n d r o i d "
p a c k a g e = " c o m . u n i v _ a m u . c c i . n o t e s " >
< a p p l i c a t i o n
a n d r o i d : a l l o w B a c k u p = " t r u e "
a n d r o i d : i c o n = " @ d r a w a b l e / i c _ l a u n c h e r "
a n d r o i d : l a b e l = " @ s t r i n g / a p p _ n a m e "
a n d r o i d : t h e m e = " @ s t y l e / A p p T h e m e " >
< a c t i v i t y
a n d r o i d : n a m e = " . M a i n A c t i v i t y "
a n d r o i d : l a b e l = " @ s t r i n g / a p p _ n a m e " >
< i n t e n t - f i l t e r >
< a c t i o n a n d r o i d : n a m e = " a n d r o i d . i n t e n t . a c t i o n . M A I N " / >
< c a t e g o r y a n d r o i d : n a m e = " a n d r o i d . i n t e n t . c a t e g o r y . L A U N C H E R " / >
< / i n t e n t - f i l t e r >
< / a c t i v i t y >
< / a p p l i c a t i o n >
< / m a n i f e s t >
5 . 19
Les identifiants
Associa ondesiden antsauxmembresd'unlayout:
< R e l a t i v e L
a y o u t
x m l n
s : a n d r o i d = " h t t p : / / s c h e m a s . a n d r o i d . c o m / a p k / r e s / a n d r o i d "
a n d r
o i d : l a y o u t _ w i d t h = " m a t c h _ p a r e n t "
a n d r
o i d : l a y o u t _ h e i g h t = " m a t c h _ p a r e n t " >
< T e x
t V i e w
a n d r o i d : i d = " @ + i d / t e x t "
a n d r o i d : l a y o u t _ w i d t h = " w r a p _ c o n t e n t "
a n d r o i d : l a y o u t _ h e i g h t = " w r a p _ c o n t e n t "
a n d r o i d : t e x t = " @ s t r i n g / h e l l o _ w o r l d " / >
< / R e l a t i v e L a y o u t >
Accsauxlmentsd'unlayoutavecsoniden ant:
p u b l i c c l a s s M a i n A c t i v i t y e x t e n d s A c t i v i t y {
@ O v e r r i d e
p r o t e c t e d v o i d o n C r e a t e ( B u n d l e s a v e d I n s t a n c e S t a t e ) {
s u p e r . o n C r e a t e ( s a v e d I n s t a n c e S t a t e ) ;
s e t C o n t e n t V i e w ( R . l a y o u t . a c t i v i t y _ m a i n ) ;
T e x t V i e w t e x t = ( T e x t V i e w ) f i n d V i e w B y I d ( R . i d . t e x t ) ;
t e x t . s e t T e x t ( R . s t r i n g . h e l l o _ w o r l d ) ;
}
}
5 . 20
Les fragments
Unfragment:
Uneac vit:
peutacherplusieursfragments
peutu liserunepilepourgrerlanaviga onentrefragments
6.1
Une application avec deux fragments
6.2
Premier layout : le formulaire
Lelayoutcorrespondantauformulairedupremiercran:
< L i n e a r L a y o u t x m l n s : a n d r o i d = " . . . " >
< E d i t T e x t
a n d r o i d : i d = " @ + i d / e d i t T e x t 1 "
a n d r o i d : i n p u t T y p e = " n u m b e r " / >
< T e x t V i e w a n d r o i d : t e x t = " @ s t r i n g / p l u s " / >
< E d i t T e x t
a n d r o i d : i d = " @ + i d / e d i t T e x t 2 "
a n d r o i d : i n p u t T y p e = " n u m b e r " / >
< B u t t o n
a n d r o i d : i d = " @ + i d / b u t t o n "
a n d r o i d : t e x t = " @ s t r i n g / e q u a l s " / >
< / L i n e a r L a y o u t >
6.3
Deuxime layout : le resultat
< T e x t V i e w x m l n s : a n d r o i d = " . . . "
x m l n s : t o o l s = " . . . "
a n d r o i d : i d = " @ + i d / t e x t V i e w "
a n d r o i d : l a y o u t _ w i d t h = " m a t c h _ p a r e n t "
a n d r o i d : l a y o u t _ h e i g h t = " m a t c h _ p a r e n t "
a n d r o i d : g r a v i t y = " c e n t e r "
a n d r o i d : t e x t S i z e = " 1 0 0 d p "
a n d r o i d : t e x t = " + " / >
6.4
Le layout de l'activit principale
Lelayoutdel'ac vitprincipale:
< F r a m e L a y o u t x m l n s : a n d r o i d = " . . . "
x m l n s : t o o l s = " . . . "
a n d r o i d : i d = " @ + i d / c o n t a i n e r "
a n d r o i d : l a y o u t _ w i d t h = " m a t c h _ p a r e n t "
a n d r o i d : l a y o u t _ h e i g h t = " m a t c h _ p a r e n t " / >
Lecodedel'ac vitprincipale:
p u b l i c c l a s s M a i n A c t i v i t y e x t e n d s A c t i v i t y {
@ O v e r r i d e
p r o t e c t e d v o i d o n C r e a t e ( B u n d l e s a v e d I n s t a n c e S t a t e ) {
s u p e r . o n C r e a t e ( s a v e d I n s t a n c e S t a t e ) ;
s e t C o n t e n t V i e w ( R . l a y o u t . a c t i v i t y _ m a i n ) ;
i f ( s a v e d I n s t a n c e S t a t e = = n u l l ) {
g e t F r a g m e n t M a n a g e r ( ) . b e g i n T r a n s a c t i o n ( )
. a d d ( R . i d . c o n t a i n e r , n e w F o r m F r a g m e n t ( ) )
. c o m m i t ( ) ;
}
}
}
6.5
Cration de la vue dans le premier fragment
p u b l i c c l a s s F o r m F r a g m e n t e x t e n d s F r a g m e n t {
@ O v e r r i d e
p u b l i c V i e w o n C r e a t e V i e w ( L a y o u t I n f l a t e r i n f l a t e r ,
V i e w G r o u p c o n t a i n e r ,
B u n d l e s a v e d I n s t a n c e S t a t e ) {
V i e w v i e w = i n f l a t e r . i n f l a t e ( R . l a y o u t . f r a g m e n t _ f o r m ,
c o n t a i n e r ,
f a l s e ) ;
r e t u r n v i e w ;
}
}
6.6
Cycle de vie d'un fragment
6.7
Notification entre le fragment et l'activit
Interfacepourrendrelefragmentru lisable:
p u b l i c i n t e r f a c e F o r m F r a g m e n t L i s t e n e r {
v o i d o n E q u a l s ( d o u b l e v a l u e 1 , d o u b l e v a l u e 2 ) ;
}
6.8
Notification entre le fragment et l'activit
Nousconservonslarfrencedel'ac vit:
p u b l i c c l a s s F o r m F r a g m e n t e x t e n d s F r a g m e n t {
p r i v a t e F o r m F r a g m e n t L i s t e n e r l i s t e n e r ;
@ O v e r r i d e
p u b l i c v o i d o n A t t a c h ( A c t i v i t y a c t i v i t y ) {
s u p e r . o n A t t a c h ( a c t i v i t y ) ;
t r y {
l i s t e n e r = ( F o r m F r a g m e n t L i s t e n e r ) a c t i v i t y ;
} c a t c h ( C l a s s C a s t E x c e p t i o n e ) {
t h r o w n e w C l a s s C a s t E x c e p t i o n ( a c t i v i t y . t o S t r i n g ( )
+ " m u s t i m p l e m e n t F o r m F r a g m e n t L i s t e n e r " ) ;
}
}
}
6.9
Notification entre le fragment et l'activit
Nousfaisonsensorted'couterlesclicssurlebouton:
p u b l i c c l a s s F o r m F r a g m e n t e x t e n d s F r a g m e n t {
p r i v a t e E d i t T e x t e d i t T e x t 1 , e d i t T e x t 2 ;
p r i v a t e F o r m F r a g m e n t L i s t e n e r l i s t e n e r ;
@ O v e r r i d e
p u b l i c V i e w o n C r e a t e V i e w ( L a y o u t I n f l a t e r i n f l a t e r ,
V i e w G r o u p c o n t a i n e r ,
B u n d l e s a v e d I n s t a n c e S t a t e ) {
V i e w v i e w = i n f l a t e r . i n f l a t e ( R . l a y o u t . f r a g m e n t _ f o r m ,
c o n t a i n e r , f a l s e ) ;
e d i t T e x t 1 = ( E d i t T e x t ) v i e w . f i n d V i e w B y I d ( R . i d . e d i t T e x t 1 ) ;
e d i t T e x t 2 = ( E d i t T e x t ) v i e w . f i n d V i e w B y I d ( R . i d . e d i t T e x t 2 ) ;
B u t t o n b u t t o n = ( B u t t o n ) v i e w . f i n d V i e w B y I d ( R . i d . b u t t o n ) ;
b u t t o n . s e t O n C l i c k L i s t e n e r ( n e w O n C l i c k L i s t e n e r ( ) ) ;
r e t u r n v i e w ;
}
}
6 . 10
Notification entre le fragment et l'activit
Nousno onsl'ac vitsiunclicseproduit:
p u b l i c c l a s s F o r m F r a g m e n t e x t e n d s F r a g m e n t {
p r i v a t e E d i t T e x t e d i t T e x t 1 , e d i t T e x t 2 ;
p r i v a t e F o r m F r a g m e n t L i s t e n e r l i s t e n e r ;
p r i v a t e c l a s s O n C l i c k L i s t e n e r i m p l e m e n t s V i e w . O n C l i c k L i s t e n e r {
@ O v e r r i d e
p u b l i c v o i d o n C l i c k ( V i e w v ) {
d o u b l e v a l u e 1 = D o u b l e . p a r s e D o u b l e ( e d i t T e x t 1 . g e t T e x t ( ) . t o S t r i n g ( ) ) ;
d o u b l e v a l u e 2 = D o u b l e . p a r s e D o u b l e ( e d i t T e x t 2 . g e t T e x t ( ) . t o S t r i n g ( ) ) ;
l i s t e n e r . o n E q u a l s ( v a l u e 1 , v a l u e 2 ) ;
}
}
}
6 . 11
Notification entre le fragment et l'activit
Rcep ondelano ca onparl'ac vit:
p u b l i c c l a s s M a i n A c t i v i t y e x t e n d s A c t i v i t y
i m p l e m e n t s F o r m F r a g m e n t L i s t e n e r {
@ O v e r r i d e
p r o t e c t e d v o i d o n C r e a t e ( B u n d l e s a v e d I n s t a n c e S t a t e ) {
s u p e r . o n C r e a t e ( s a v e d I n s t a n c e S t a t e ) ;
s e t C o n t e n t V i e w ( R . l a y o u t . a c t i v i t y _ m a i n ) ;
i f ( s a v e d I n s t a n c e S t a t e = = n u l l ) {
g e t F r a g m e n t M a n a g e r ( ) . b e g i n T r a n s a c t i o n ( )
. a d d ( R . i d . c o n t a i n e r , n e w F o r m F r a g m e n t ( ) )
. c o m m i t ( ) ;
}
}
@ O v e r r i d e
p u b l i c v o i d o n E q u a l s ( d o u b l e v a l u e 1 , d o u b l e v a l u e 2 ) {
/ * T O D O : a f f i c h e r l e r s u l t a t * /
}
}
6 . 12
Le deuxime fragment
p u b l i c c l a s s R e s u l t F r a g m e n t e x t e n d s F r a g m e n t {
p u b l i c s t a t i c R e s u l t F r a g m e n t g e t I n s t a n c e ( d o u b l e v a l u e ) {
R e s u l t F r a g m e n t f r a g m e n t = n e w R e s u l t F r a g m e n t ( ) ;
B u n d l e b u n d l e = n e w B u n d l e ( ) ;
b u n d l e . p u t D o u b l e ( " v a l u e " , v a l u e ) ;
f r a g m e n t . s e t A r g u m e n t s ( b u n d l e ) ;
r e t u r n f r a g m e n t ;
}
@ O v e r r i d e
p u b l i c V i e w o n C r e a t e V i e w ( L a y o u t I n f l a t e r i n f l a t e r , V i e w G r o u p c o n t a i n e r ,
B u n d l e s a v e d I n s t a n c e S t a t e ) {
V i e w v i e w = i n f l a t e r . i n f l a t e ( R . l a y o u t . f r a g m e n t _ r e s u l t ,
c o n t a i n e r , f a l s e ) ;
T e x t V i e w t e x t V i e w = ( T e x t V i e w ) v i e w . f i n d V i e w B y I d ( R . i d . t e x t V i e w ) ;
t e x t V i e w . s e t T e x t ( " " + v a l u e ( ) ) ;
r e t u r n v i e w ;
}
p u b l i c d o u b l e v a l u e ( ) {
r e t u r n g e t A r g u m e n t s ( ) . g e t D o u b l e ( " v a l u e " ) ;
}
}
6 . 13
Affichage du deuxime fragment par l'activit
p u b l i c c l a s s R e s u l t F r a g m e n t e x t e n d s F r a g m e n t
i m p l e m e n t s F o r m F r a g m e n t L i s t e n e r {
@ O v e r r i d e
p u b l i c v o i d o n E q u a l s ( d o u b l e v a l u e 1 , d o u b l e v a l u e 2 ) {
d o u b l e v a l u e = v a l u e 1 + v a l u e 2 ;
g e t F r a g m e n t M a n a g e r ( ) . b e g i n T r a n s a c t i o n ( )
. r e p l a c e ( R . i d . c o n t a i n e r ,
R e s u l t F r a g m e n t . g e t I n s t a n c e ( v a l u e ) )
. a d d T o B a c k S t a c k ( " r e s u l t " )
. c o m m i t ( ) ;
}
6 . 14
Affichage de deux fragments par l'activit
6 . 15
Affichage de deux fragments par l'activit
Lelayoutdel'ac vitpardfaut:
< L i n e a r L a y o u t x m l n s : a n d r o i d = " . . . "
a n d r o i d : o r i e n t a t i o n = " v e r t i c a l "
a n d r o i d : l a y o u t _ w i d t h = " m a t c h _ p a r e n t "
a n d r o i d : l a y o u t _ h e i g h t = " m a t c h _ p a r e n t " >
< f
r a g m e n t c l a s s = " c o m . u n i v _ a m u . c c i . m y a p p l i c a t i o n . F o r m F r a g m e n t "
a n d r o i d : i d = " @ + i d / f o r m "
a n d r o i d : l a y o u t _ w i d t h = " m a t c h _ p a r e n t "
a n d r o i d : l a y o u t _ h e i g h t = " w r a p _ c o n t e n t " / >
< F r a m e L a y o u t a n d r o i d : i d = " @ + i d / c o n t a i n e r "
a n d r o i d : l a y o u t _ w i d t h = " m a t c h _ p a r e n t "
a n d r o i d : l a y o u t _ h e i g h t = " w r a p _ c o n t e n t "
a n d r o i d : b a c k g r o u n d = " ? a n d r o i d : a t t r / d e t a i l s E l e m e n t B a c k g r o u n d " / >
< / L i n e a r L a y o u t >
6 . 16
Affichage de deux fragments par l'activit
6 . 17
Affichage de deux fragments par l'activit
Lecodedel'ac vit:
p u b l i c c l a s s M a i n A c t i v i t y e x t e n d s A c t i v i t y
i m p l e m e n t s F o r m F r a g m e n t L i s t e n e r {
@ O v e r r i d e
p r o t e c t e d v o i d o n C r e a t e ( B u n d l e s a v e d I n s t a n c e S t a t e ) {
s u p e r . o n C r e a t e ( s a v e d I n s t a n c e S t a t e ) ;
s e t C o n t e n t V i e w ( R . l a y o u t . a c t i v i t y _ m a i n ) ;
}
@ O v e r r i d e
p u b l i c v o i d o n E q u a l s ( d o u b l e v a l u e 1 , d o u b l e v a l u e 2 ) {
d o u b l e v a l u e = v a l u e 1 + v a l u e 2 ;
g e t F r a g m e n t M a n a g e r ( ) . b e g i n T r a n s a c t i o n ( )
. r e p l a c e ( R . i d . c o n t a i n e r , R e s u l t F r a g m e n t . g e t I n s t a n c e ( v a l u e ) )
. a d d T o B a c k S t a c k ( " r e s u l t " )
. c o m m i t ( ) ;
}
}
6 . 18
Les boites de dialogue
6 . 19
Les boites de dialogue
Lesboitesdedialoguesontdesfragments:
p u b l i c c l a s s D i a l o g F r a g m e n t e x t e n d s a n d r o i d . a p p . D i a l o g F r a g m e n t {
p r i v a t e E d i t T e x t e d i t T e x t ;
@ O v e r r i d e
p u b l i c D i a l o g o n C r e a t e D i a l o g ( B u n d l e s a v e d I n s t a n c e S t a t e ) {
A l e r t D i a l o g . B u i l d e r b u i l d e r = n e w A l e r t D i a l o g . B u i l d e r ( g e t A c t i v i t y ( ) ) ;
L a y o u t I n f l a t e r i n f l a t e r = g e t A c t i v i t y ( ) . g e t L a y o u t I n f l a t e r ( ) ;
V i e w v i e w = i n f l a t e r . i n f l a t e ( R . l a y o u t . d i a l o g , n u l l ) ;
e d i t T e x t = ( E d i t T e x t ) v i e w . f i n d V i e w B y I d ( R . i d . e d i t T e x t ) ;
b u i l d e r . s e t V i e w ( v i e w )
. s e t P o
t t o n ( a s i t i v e B u n d r o i d . R . s t r i n g . o k ,
n e w O n P o s i t i v e B u t t o n C l i c k L i s t e n e r ( ) )
. s e t N e g a t i v e B u t t o n ( a n d r o i d . R . s t r i n g . c a n c e l ,
n e w O n N e g a t i v e B u t t o n C l i c k L i s t e n e r ( ) ) ;
r e t u r n b u i l d e r . c r e a t e ( ) ;
}
}
6 . 20
Les boites de dialogue
L'inferfacedecommunica on:
p u b l i c i n t e r f a c e D i a l o g F r a g m e n t L i s t e n e r {
v o i d o n C h a n g e T e x t ( S t r i n g t e x t ) ;
}
Onrednitensuitelamthode onAttach:
p u b l i c c l a s s D i a l o g F r a g m e n t e x t e n d s a n d r o i d . a p p . D i a l o g F r a g m e n t {
p r i v a t e D i a l o g F r a g m e n t L i s t e n e r l i s t e n e r ;
@ O v e r r i d e
p u b l i c v o i d o n A t t a c h ( A c t i v i t y a c t i v i t y ) {
s u p e r . o n A t t a c h ( a c t i v i t y ) ;
t r y { l i s t e n e r = ( D i a l o g F r a g m e n t L i s t e n e r ) a c t i v i t y ; }
c a t c h ( C l a s s C a s t E x c e p t i o n e ) {
t h r o w n e w C l a s s C a s t E x c e p t i o n ( a c t i v i t y . t o S t r i n g ( )
+ " m u s t i m p l e m e n t D i a l o g F r a g m e n t L i s t e n e r " ) ;
}
}
}
6 . 21
Les boites de dialogue
Lescouteursdesvnements:
p u b l i c c l a s s D i a l o g F r a g m e n t e x t e n d s a n d r o i d . a p p . D i a l o g F r a g m e n t {
p r i v a t e c l a s s O n P o s i t i v e B u t t o n C l i c k L i s t e n e r
i m p l e m e n t s D i a l o g I n t e r f a c e . O n C l i c k L i s t e n e r {
@ O v e r r i d e
p u b l i c v o i d o n C l i c k ( D i a l o g I n t e r f a c e d i a l o g , i n t i d ) {
l i s t e n e r . o n C h a n g e T e x t ( e d i t T e x t . g e t T e x t ( ) . t o S t r i n g ( ) ) ;
D i a l o g F r a g m e n t . t h i s . g e t D i a l o g ( ) . d i s m i s s ( ) ;
}
}
p r i v a t e c l a s s O n N e g a t i v e B u t t o n C l i c k L i s t e n e r
i m p l e m e n t s D i a l o g I n t e r f a c e . O n C l i c k L i s t e n e r {
p u b l i c v o i d o n C l i c k ( D i a l o g I n t e r f a c e d i a l o g , i n t i d ) {
D i a l o g F r a g m e n t . t h i s . g e t D i a l o g ( ) . c a n c e l ( ) ;
}
}
}
6 . 22
Les boites de dialogue
p u b l i c c l a s s M a i n A c t i v i t y e x t e n d s A c t i v i t y i m p l e m e n t s D i a l o g F r a g m e n t L i s t e n e r {
p r i v a t e T e x t V i e w t e x t V i e w ;
@ O v e r r i d e
p r o t e c t e d v o i d o n C r e a t e ( B u n d l e s a v e d I n s t a n c e S t a t e ) {
s u p e r . o n C r e a t e ( s a v e d I n s t a n c e S t a t e ) ;
s e t C o n t e n t V i e w ( R . l a y o u t . a c t i v i t y _ m a i n ) ;
t e x t V i e w = ( T e x t V i e w ) f i n d V i e w B y I d ( R . i d . t e x t V i e w ) ;
t e x t V i e w . s e t O n C l i c k L i s t e n e r ( n e w O n C l i c k L i s t e n e r ( ) ) ;
}
@ O v e r r i d e
p u b l i c v o i d o n C h a n g e T e x t ( S t r i n g t e x t ) { t e x t V i e w . s e t T e x t ( t e x t ) ; }
p r i v a t e c l a s s O n C l i c k L i s t e n e r i m p l e m e n t s V i e w . O n C l i c k L i s t e n e r {
@ O v e r r i d e
p u b l i c v o i d o n C l i c k ( V i e w v ) {
D i a l o g F r a g m e n t n e w F r a g m e n t = n e w D i a l o g F r a g m e n t ( ) ;
n e w F r a g m e n t . s h o w ( g e t F r a g m e n t M a n a g e r ( ) , " d i a l o g " ) ;
}
}
}
6 . 23
Les menus
< m e n u x m l n s : a n d r o i d = " . . . . " >
< i t e m a n d r o i d : i d = " @ + i d / a c t i o n _ d e c r e m e n t "
a n d r o i d : t i t l e = " @ s t r i n g / i n c r e m e n t "
a n d r o i d : i c o n = " @ d r a w a b l e / p r e v i o u s "
a n d r o i d : s h o w A s A c t i o n = " i f R o o m " / >
< i t e m a n d r o i d : i d = " @ + i d / a c t i o n _ i n c r e m e n t "
a n d r o i d : t i t l e = " @ s t r i n g / d e c r e m e n t "
a n d r o i d : i c o n = " @ d r a w a b l e / n e x t "
a n d r o i d : s h o w A s A c t i o n = " i f R o o m " / >
< / m e n u >
7.1
Chargement et traitement des actions du menu
p u b l i c c l a s s M a i n A c t i v i t y e x t e n d s A c t i v i t y {
@ O v e r r i d e
p u b l i c b o o l e a n o n C r e a t e O p t i o n s M e n u ( M e n u m e n u ) {
g e t M e n u I n f l a t e r ( ) . i n f l a t e ( R . m e n u . m a i n , m e n u ) ;
r e t u r n t r u e ;
}
@ O v e r r i d e
p u b l i c b o o l e a n o n O p t i o n s I t e m S e l e c t e d ( M e n u I t e m i t e m ) {
s w i t c h ( i t e m . g e t I t e m I d ( ) ) {
c a s e R . i d . a c t i o n _ d e c r e m e n t :
d e c r e m e n t ( ) ;
r e t u r n t r u e ;
c a s e R . i d . a c t i o n _ i n c r e m e n t :
i n c r e m e n t ( ) ;
r e t u r n t r u e ;
d e f a u l t :
r e t u r n s u p e r . o n O p t i o n s I t e m S e l e c t e d ( i t e m ) ;
}
}
/ * l e s m t h o d e s d e c r e m e n t , i n c r e m e n t e t o n C r e a t e * /
}
7.2
Chargement et traitement des actions du menu
p u b l i c c l a s s M a i n A c t i v i t y e x t e n d s A c t i v i t y {
/ * . . . * /
p r i v a t e T e x t V i e w c o u n t e r T e x t V i e w ;
p r i v a t e i n t c o u n t e r = 0 ;
@ O v e r r i d e
p r o t e c t e d v o i d o n C r e a t e ( B u n d l e s a v e d I n s t a n c e S t a t e ) {
s u p e r . o n C r e a t e ( s a v e d I n s t a n c e S t a t e ) ;
s e t C o n t e n t V i e w ( R . l a y o u t . a c t i v i t y _ m a i n ) ;
c o u n t e r T e x t V i e w = ( T e x t V i e w ) f i n d V i e w B y I d ( R . i d . c o u n t e r ) ;
u p d a t e T e x t V i e w ( ) ;
}
p r i v a t e v o i d u p d a t e T e x t V i e w ( ) { c o u n t e r T e x t V i e w . s e t T e x t ( " " + c o u n t e r ) ; }
p r i v a t e v o i d i n c r e m e n t ( ) { c o u n t e r + + ; u p d a t e T e x t V i e w ( ) ; }
p r i v a t e v o i d d e c r e m e n t ( ) { c o u n t e r - - ; u p d a t e T e x t V i e w ( ) ; }
}
7.3
Sauvegarde de l'tat de l'activit
p u b l i c c l a s s M a i n A c t i v i t y e x t e n d s A c t i v i t y {
/ * . . . * /
@ O v e r r i d e
p r o t e c t e d v o i d o n S a v e I n s t a n c e S t a t e ( B u n d l e o u t S t a t e ) {
s u p e r . o n S a v e I n s t a n c e S t a t e ( o u t S t a t e ) ;
o u t S t a t e . p u t I n t ( " c o u n t e r " , c o u n t e r ) ;
}
@ O v e r r i d e
p r o t e c t e d v o i d o n R e s t o r e I n s t a n c e S t a t e ( B u n d l e s a v e d I n s t a n c e S t a t e ) {
s u p e r . o n R e s t o r e I n s t a n c e S t a t e ( s a v e d I n s t a n c e S t a t e ) ;
c o u n t e r = s a v e d I n s t a n c e S t a t e . g e t I n t ( " c o u n t e r " ) ;
u p d a t e T e x t V i e w ( ) ;
}
7.4
Menus et fragments
< L i n e a r L a y o u t x m l n s : a n d r o i d = " . . . "
a n d r o i d : l a y o u t _ w i d t h = " m a t c h _ p a r e n t "
a n d r o i d : l a y o u t _ h e i g h t = " m a t c h _ p a r e n t "
a n d r o i d : o r i e n t a t i o n = " v e r t i c a l " >
< f r a g m e n t
a n d r o i d : i d = " @ + i d / c o u n t e r F r a g m e n t "
a n d r o i d : n a m e = " . C o u n t e r F r a g m e n t "
a n d r o i d : l a y o u t _ w e i g h t = " 1 "
a n d r o i d : l a y o u t _ w i d t h = " m a t c h _ p a r e n t "
a n d r o i d : l a y o u t _ h e i g h t = " 0 d p " / >
< f r a g m e n t
a n d r o i d : i d = " @ + i d / c o l o r F r a g m e n t "
a n d r o i d : n a m e = " . C o l o r F r a g m e n t "
a n d r o i d : l a y o u t _ w e i g h t = " 1 "
a n d r o i d : l a y o u t _ w i d t h = " m a t c h _ p a r e n t "
a n d r o i d : l a y o u t _ h e i g h t = " 0 d p " / >
< / L i n e a r L a y o u t >
7.5
Menus et fragments
7.6
Menus et fragments
p u b l i c c l a s s C o u n t e r F r a g m e n t e x t e n d s F r a g m e n t {
p r i v a t e T e x t V i e w c o u n t e r T e x t V i e w ;
@ O v e r r i d e
p u b l i c V i e w o n C r e a t e V i e w ( L a y o u t I n f l a t e r i n f l a t e r , V i e w G r o u p c o n t a i n e r ,
B u n d l e s a v e d I n s t a n c e S t a t e ) {
V i e w v i e w = i n f l a t e r . i n f l a t e ( R . l a y o u t . f r a g m e n t _ c o u n t e r , c o n t a i n e r , f a l s e ) ;
c o u n t e r T e x t V i e w = ( T e x t V i e w ) v i e w . f i n d V i e w B y I d ( R . i d . c o u n t e r ) ;
u p d a t e T e x t V i e w ( ) ;
r e t u r n v i e w ;
}
@ O v e r r i d e
p u b l i c v o i d o n C r e a t e ( B u n d l e s a v e d I n s t a n c e S t a t e ) {
s u p e r . o n C r e a t e ( s a v e d I n s t a n c e S t a t e ) ; s e t H a s O p t i o n s M e n u ( t r u e ) ;
}
@ O v e r r i d e
p u b l i c v o i d o n C r e a t e O p t i o n s M e n u ( M e n u m e n u , M e n u I n f l a t e r i n f l a t e r ) {
s u p e r . o n C r e a t e O p t i o n s M e n u ( m e n u , i n f l a t e r ) ;
i n f l a t e r . i n f l a t e ( R . m e n u . m e n u _ c o u n t e r , m e n u ) ;
}
/ * . . . * /
}
7.7
Menus et fragments
7.8
Menus et fragments
p u b l i c c l a s s C o u n t e r F r a g m e n t e x t e n d s F r a g m e n t {
p r i v a t e i n t c o u n t e r = 0 ;
/ * . . . * /
p r i v a t e v o i d u p d a t e T e x t V i e w ( ) { c o u n t e r T e x t V i e w . s e t T e x t ( " " + c o u n t e r ) ; }
@ O v e r r i d e
p u b l i c b o o l e a n o n O p t i o n s I t e m S e l e c t e d ( M e n u I t e m i t e m ) {
s w i t c h ( i t e m . g e t I t e m I d ( ) ) {
c a s e R . i d . a c t i o n _ d e c r e m e n t :d e c r e m e n t ( ) ; r e t u r n t r u e ;
c a s e R . i d . a c t i o n _ i n c r e m e n t : i n c r e m e n t ( ) ; r e t u r n t r u e ;
d e f a u l t : r e t u r n s u p e r . o n O p t i o n s I t e m S e l e c t e d ( i t e m ) ;
}
}
p r i v a t e v o i d i n c r e m e n t ( ) { c o u n t e r + + ; u p d a t e T e x t V i e w ( ) ; }
p r i v a t e v o i d d e c r e m e n t ( ) { c o u n t e r - - ; u p d a t e T e x t V i e w ( ) ; }
}
Touslesfragmentspeuventrecevoirlesno ca ons
Lepremierquiretourne truearrtelapropaga on
7.9
Menus et fragments
p u b l i c c l a s s C o l o r F r a g m e n t e x t e n d s F r a g m e n t {
p r i v a t e I m a g e V i e w i m a g e V i e w ;
p r i v a t e i n t c o l o r = C o l o r . R E D ;
@ O v e r r i d e
p u b l i c V i e w o n C r e a t e V i e w ( L a y o
u t I n f l a t e r i n f l a t e r ,
V i e w
G r o u p c o n t a i n e r ,
B u n d
l e s a v e d I n s t a n c e S t a t e ) {
V i e w v i e w = i n f l a t e r . i n f l a
t e ( R . l a y o u t . f r a g m e n t _ c o l o r ,
c o n t a i n e r , f a l s e ) ;
i m a g e V i e w = ( I m a g e V i e w ) v i e w . f i n d V i e w B y I d ( R . i d . c o l o r ) ;
u p d a t e I m a g e V i e w ( ) ;
r e t u r n v i e w ;
}
p r i v a t e v o i d u p d a t e I m a g e V i e w ( ) { i m a g e V i e w . s e t B a c k g r o u n d C o l o r ( c o l o r ) ; }
}
7 . 10
Menus et fragments
7 . 11
Menus et fragments
p u b l i c c l a s s C o l o r F r a g m e n t e x t e n d s F r a g m e n t {
p r i v a t e I m a g e V i e w i m a g e V i e w ;
p r i v a t e i n t c o l o r = C o l o r . R E D ;
/ * . . . * /
@ O v e r r i d e
p u b l i c v o i d o n C r e a t e ( B u n d l e s a v e d I n s t a n c e S t a t e ) {
s u p e r . o n C r e a t e ( s a v e d I n s t a n c e S t a t e ) ;
s e t H a s O p t i o n s M e n u ( t r u e ) ;
}
@ O v e r r i d e
p u b l i c v o i d o n C r e a t e O p t i o n s M e n u ( M e n u m e n u ,
M e n u I n f l a t e r i n f l a t e r ) {
s u p e r . o n C r e a t e O p t i o n s M e n u ( m e n u , i n f l a t e r ) ;
i n f l a t e r . i n f l a t e ( R . m e n u . m e n u _ c o l o r , m e n u ) ;
}
}
7 . 12
Menus et fragments
p u b l i c c l a s s C o l o r F r a g m e n t e x t e n d s F r a g m e n t {
@ O v e r r i d e
p u b l i c b o o l e a n o n O p t i o n s I t e m S e l e c t e d ( M e n u I t e m i t e m ) {
s w i t c h ( i t e m . g e t I t e m I d ( ) ) {
c a s e R . i d . a c t i o n _ r e d :
c h a n g e C o l o r ( C o l o r . R E D ) ; r e t u r n t r u e ;
c a s e R . i d . a c t i o n _ b l u e :
c h a n g e C o l o r ( C o l o r . B L U E ) ; r e t u r n t r u e ;
d e f a u l t : r e t u r n s u p e r . o n O p t i o n s I t e m S e l e c t e d ( i t e m ) ;
}
}
p r i v a t e v o i d c h a n g e C o l o r ( i n t c o l o r ) {
t h i s . c o l o r = c o l o r ; u p d a t e I m a g e V i e w ( ) ;
}
}
7 . 13
Les listes
DanslecoursetlesTP,nousallonsu liserdes RecyclerView:
8.1
Ilestgalementpossibled'u liserl'ancienneclasse ListView.
Les listes
Un RecyclerViewpermetl'achaged'ungrandnombredevues
Un LayoutManagerpermetdegrerlaposi ondeslments
Un Adaptervaadapterlesdonnesauxvues
RecyclerView
8.2
Le layout principal de l'application
< a n d r o i d . s u p p o r t . v 7 . w i d g e t . R e c y c l e r V i e w
x m l n s : a n d r o i d = " . . . "
a n d r o i d : i d = " @ + i d / r e c y c l e r V i e w "
a n d r o i d : l a y o u t _ w i d t h = " m a t c h _ p a r e n t "
a n d r o i d : l a y o u t _ h e i g h t = " m a t c h _ p a r e n t "
/ >
p u b l i c c l a s s M a i n A c t i v i t y e x t e n d s A c t i v i t y {
p r i v a t e I t e m A d a p t e r a d a p t e r ;
p r i v a t e A r r a y L i s t < S t r i n g > d a t a s e t ;
@ O v e r r i d e
p r o t e c t e d v o i d o n C r e a t e ( B u n d l e s a v e d I n s t a n c e S t a t e ) {
s u p e r . o n C r e a t e ( s a v e d I n s t a n c e S t a t e ) ;
s e t C o n t e n t V i e w ( R . l a y o u t . a c t i v i t y _ m a i n ) ;
R e c y c l e r V i e w r e c y c l e r V i e w = ( R e c y c l e r V i e w ) f i n d V i e w B y I d ( R . i d . r e c y c l e r V i e w ) ;
R e c y c l e r V i e w . L a y o u t M a n a g e r l a y o u t M a n a g e r = n e w G r i d L a y o u t M a n a g e r ( t h i s , 2 ) ;
r e c y c l e r V i e w . s e t L a y o u t M a n a g e r ( l a y o u t M a n a g e r ) ;
d a t a s e t = n e w A r r a y L i s t < > ( ) ;
a d a p t e r = n e w I t e m A d a p t e r ( d a t a s e t ) ;
r e c y c l e r V i e w . s e t A d a p t e r ( a d a p t e r ) ;
}
}
8.3
Code de l'adaptateur
p u b l i c c l a s s I t e m A d a p t e r
e x t e n d s R e c y c l e r V i e w . A d a p t e r < I t e m A d a p t e r . V i e w H o l d e r > {
p r i v a t e f i n a l L i s t < S t r i n g > d a t a s e t ;
p u b l i c I t e m A d a p t e r ( L i s t < S t r i n g > d a t a s e t ) { t h i s . d a t a s e t = d a t a s e t ; }
@ O v e r r i d e
p u b l i c V i e w H o l d e r o n C r e a t e V i e w H o l d e r ( V i e w G r o u p g r o u p , i n t t y p e V i e w ) {
V i e w v i e w = L a y o u t I n f l a t e r . f r o m ( g r o u p . g e t C o n t e x t ( ) )
. i n f l a t e ( a n d r o i d . R . l a y o u t . s i m p l e _ l i s t _ i t e m _ 1 , g r o u p , f a l s e ) ;
V i e w H o l d e r v i e w H o l d e r = n e w V i e w H o l d e r ( v i e w ) ;
r e t u r n v i e w H o l d e r ;
}
p u b l i c c l a s s V i e w H o l d e r e x t e n d s R e c y c l e r V i e w . V i e w H o l d e r {
f i n a l T e x t V i e w t e x t V i e w ;
p u b l i c V i e w H o l d e r ( V i e w i t e m V i e w ) {
s u p e r ( i t e m V i e w ) ;
t e x t V i e w = ( T e x t V i e w ) i t e m V i e w . f i n d V i e w B y I d ( a n d r o i d . R . i d . t e x t 1 ) ;
}
p u b l i c v o i d b i n d ( i n t i n d e x ) { t e x t V i e w . s e t T e x t ( d a t a s e t . g e t ( i n d e x ) ) ; }
}
}
8.4
Code de l'adaptateur
p u b l i c c l a s s I t e m A d a p t e r
e x t e n d s R e c y c l e r V i e w . A d a p t e r < I t e m A d a p t e r . V i e w H o l d e r > {
/ * . . . * /
@ O v e r r i d e
p u b l i c v o i d o n B i n d V i e w H o l d e r ( V i e w H o l d e r v i e w H o l d e r , i n t i n d e x ) {
v i e w H o l d e r . b i n d ( i n d e x ) ;
}
@ O v e r r i d e
p u b l i c i n t g e t I t e m C o u n t ( ) { r e t u r n d a t a s e t . s i z e ( ) ; }
8.5
Mise en place du dialogue d'ajout d'un item
Interfacedecommunica on:
p u b l i c i n t e r f a c e D i a l o g F r a g m e n t L i s t e n e r {
v o i d o n A d d I t e m ( S t r i n g t e x t ) ;
}
@ O v e r r i d e
p u b l i c v o i d o n A d d I t e m ( S t r i n g t e x t ) {
/ * T O D O * /
}
}
8.6
Notification de l'adaptateur de la modification du modle
p r i v a t e I t e m A d a p t e r a d a p t e r ;
p r i v a t e A r r a y L i s t < S t r i n g > d a t a s e t ;
@ O v e r r i d e
p u b l i c v o i d o n A d d I t e m ( S t r i n g t e x t ) {
d a t a s e t . a d d ( t e x t ) ;
a d a p t e r . n o t i f y D a t a S e t C h a n g e d ( ) ;
}
}
Ilestpossibledeno erl'adaptateurplusnementavecles
mthodes notifyItemChanged, notifyItemInserted,
notifyItemMoved, notifyItemRangeChanged,etc.
8.7
Ajout d'un menu l'activit
p u b l i c c l a s s M a i n A c t i v i t y e x t e n d s A c t i v i t y
i m p l e m e n t s D i a l o g F r a g m e n t L i s t e n e r {
@ O v e r r i d e
p u b l i c b o o l e a n o n C r e a t e O p t i o n s M e n u ( M e n u m e n u ) {
g e t M e n u I n f l a t e r ( ) . i n f l a t e ( R . m e n u . m e n u _ m a i n , m e n u ) ;
r e t u r n t r u e ;
}
@ O v e r r i d e
p u b l i c b o o l e a n o n O p t i o n s I t e m S e l e c t e d ( M e n u I t e m i t e m ) {
i f ( i t e m . g e t I t e m I d ( ) = = R . i d . a c t i o n _ a d d ) {
D i a l o g F r a g m e n t n e w F r a g m e n t = n e w D i a l o g F r a g m e n t ( ) ;
n e w F r a g m e n t . s h o w ( g e t F r a g m e n t M a n a g e r ( ) , " d i a l o g " ) ;
r e t u r n t r u e ;
}
r e t u r n s u p e r . o n O p t i o n s I t e m S e l e c t e d ( i t e m ) ;
}
}
8.8
Code de la boite de dialogue
p u b l i c c l a s s D i a l o g F r a g m e n t e x t e n d s a n d r o i d . a p p . D i a l o g F r a g m e n t {
p r i v a t e E d i t T e x t e d i t T e x t ;
@ O v e r r i d e
p u b l i c D i a l o g o n C r e a t e D i a l o g ( B u n d l e s a v e d I n s t a n c e S t a t e ) {
A l e r t D i a l o g . B u i l d e r b u i l d e r =
n e w A l e r t D i a l o g . B u i l d e r ( g e t A c t i v i t y ( ) ) ;
L a y o u t I n f l a t e r i n f l a t e r = g e t A c t i v i t y ( ) . g e t L a y o u t I n f l a t e r ( ) ;
V i e w v i e w = i n f l a t e r . i n f l a t e ( R . l a y o u t . d i a l o g , n u l l ) ;
e d i t T e x t = ( E d i t T e x t ) v i e w . f i n d V i e w B y I d ( R . i d . e d i t T e x t ) ;
b u i l d e r . s e t V i e w ( v i e w )
. s e t P o s i t i v
u t t o n ( ae B n d r o i d . R . s t r i n g . o k ,
n e w O n P o s i t i v e B u t t o n C l i c k L i s t e n e r ( ) )
. s e t N e g a t i v e B u t t o n ( a n d r o i d . R . s t r i n g . c a n c e l ,
n e w O n N e g a t i v e B u t t o n C l i c k L i s t e n e r ( ) ) ;
r e t u r n b u i l d e r . c r e a t e ( ) ;
}
}
8.9
Code de la boite de dialogue
8 . 10
Code de la boite de dialogue
p u b l i c c l a s s D i a l o g F r a g m e n t e x t e n d s a n d r o i d . a p p . D i a l o g F r a g m e n t {
p r i v a t e E d i t T e x t e d i t T e x t ;
p r i v a t e D i a l o g F r a g m e n t L i s t e n e r l i s t e n e r ;
/ * . . . * /
@ O v e r r i d e
p u b l i c v o i d o n A t t a c h ( A c t i v i t y a c t i v i t y ) {
s u p e r . o n A t t a c h ( a c t i v i t y ) ;
t r y {
l i s t e n e r = ( D i a l o g F r a g m e n t L i s t e n e r ) a c t i v i t y ;
} c a t c h ( C l a s s C a s t E x c e p t i o n e ) {
t h r o w n e w C l a s s C a s t E x c e p t i o n ( a c t i v i t y . t o S t r i n g ( )
+ " m u s t i m p l e m e n t D i a l o g F r a g m e n t L i s t e n e r " ) ;
}
}
}
8 . 11
Code de la boite de dialogue
p u b l i c c l a s s D i a l o g F r a g m e n t e x t e n d s a n d r o i d . a p p . D i a l o g F r a g m e n t {
/ * . . . * /
p r i v a t e c l a s s O n P o s i t i v e B u t t o n C l i c k L i s t e n e r
i m p l e m e n t s D i a l o g I n t e r f a c e . O n C l i c k L i s t e n e r {
@ O v e r r i d e
p u b l i c v o i d o n C l i c k ( D i a l o g I n t e r f a c e d i a l o g , i n t i d ) {
l i s t e n e r . o n A d d I t e m ( e d i t T e x t . g e t T e x t ( ) . t o S t r i n g ( ) ) ;
D i a l o g F r a g m e n t . t h i s . g e t D i a l o g ( ) . d i s m i s s ( ) ;
}
}
p r i v a t e c l a s s O n N e g a t i v e B u t t o n C l i c k L i s t e n e r
i m p l e m e n t s D i a l o g I n t e r f a c e . O n C l i c k L i s t e n e r {
p u b l i c v o i d o n C l i c k ( D i a l o g I n t e r f a c e d i a l o g , i n t i d ) {
D i a l o g F r a g m e n t . t h i s . g e t D i a l o g ( ) . c a n c e l ( ) ;
}
}
}
8 . 12
Slection des lments
Slection des lments
p u b l i c i n t e r f a c e O n I t e m C l i c k { v o i d o n C l i c k ( i n t i n d e x ) ; }
p u b l i c v o i d s e t O n I t e m C l i c k ( O n I t e m C l i c k l i s t e n e r ) {
l i s t e n e r s . a d d ( l i s t e n e r ) ;
}
p u b l i c v o i d n o t i f y O n I t e m C l i c k ( i n t i n d e x ) {
f o r ( O n I t e m C l i c k l i s t e n e r : l i s t e n e r s )
l i s t e n e r . o n C l i c k ( i n d e x ) ;
}
}
8 . 14
13
Slection des lments
p u b l i c V i e w H o l d e r ( V i e w i t e m V i e w ) {
/ * . . . * / i t e m V i e w . s e t O n C l i c k L i s t e n e r ( n e w O n C l i c k L i s t e n e r ( ) ) ;
}
p u b l i c v o i d b i n d ( i n t i n d e x ) { t h i s . i n d e x = i n d e x ; / * . . . * / }
p r i v a t e c l a s s O n C l i c k L i s t e n e r i m p l e m e n t s V i e w . O n C l i c k L i s t e n e r {
@ O v e r r i d e
p u b l i c v o i d o n C l i c k ( V i e w v i e w ) { n o t i f y O n I t e m C l i c k ( i n d e x ) ; }
}
}
}
8 . 15
Slection des lments
@ O v e r r i d e
p r o t e c t e d v o i d o n C r e a t e ( B u n d l e s a v e d I n s t a n c e S t a t e ) {
/ * . . . * /
a d a p t e r = n e w I t e m A d a p t e r ( d a t a s e t , s e l e c t e d I t e m s ) ;
a d a p t e r . s e t O n I t e m C l i c k ( n e w O n I t e m C l i c k ( ) ) ;
}
p r i v a t e c l a s s O n I t e m C l i c k i m p l e m e n t s I t e m A d a p t e r . O n I t e m C l i c k {
@ O v e r r i d e
p u b l i c v o i d o n C l i c k ( i n t i n d e x ) { / * T O D O * / }
}
}
8 . 16
Slection des lments
Mthodespourgrerlesslec ons:
p u b l i c c l a s s M a i n A c t i v i t y e x t e n d s A c t i v i t y
i m p l e m e n t s D i a l o g F r a g m e n t L i s t e n e r {
p r i v a t e S p a r s e B o o l e a n A r r a y s e l e c t e d I t e m s = n e w S p a r s e B o o l e a n A r r a y ( ) ;
p r i v a t e i n t n u m b e r O f S e l e c t e d I t e m s ;
p r i v a t e v o i d s w a p I t e m S e l e c t i o n ( i n t i n d e x ) {
s e l e c t e d I t e m s . p u t ( i n d e x , ! s e l e c t e d I t e m s . g e t ( i n d e x ) ) ;
a d a p t e r . n o t i f y D a t a S e t C h a n g e d ( ) ;
n u m b e r O f S e l e c t e d I t e m s + = s e l e c t e d I t e m s . g e t ( i n d e x ) ? 1 : - 1 ;
}
p r i v a t e v o i d c l e a r S e l e c t i o n ( ) {
s e l e c t e d I t e m s . c l e a r ( ) ;
n u m b e r O f S e l e c t e d I t e m s = 0 ;
a d a p t e r . n o t i f y D a t a S e t C h a n g e d ( ) ;
}
}
8 . 17
Slection des lments
p u b l i c c l a s s M a i n A c t i v i t y e x t e n d s A c t i v i t y
i m p l e m e n t s D i a l o g F r a g m e n t L i s t e n e r {
p r i v a t e I t e m A d a p t e r a d a p t e r ;
@ O v e r r i d e
p r o t e c t e d v o i d o n C r e a t e ( B u n d l e s a v e d I n s t a n c e S t a t e ) {
/ * . . . * /
a d a p t e r = n e w I t e m A d a p t e r ( d a t a s e t , s e l e c t e d I t e m s ) ;
a d a p t e r . s e t O n I t e m C l i c k ( n e w O n I t e m C l i c k ( ) ) ;
}
p r i v a t e c l a s s O n I t e m C l i c k i m p l e m e n t s I t e m A d a p t e r . O n I t e m C l i c k {
@ O v e r r i d e
p u b l i c v o i d o n C l i c k ( i n t i n d e x ) { s w a p I t e m S e l e c t i o n ( i n d e x ) ; }
}
}
8 . 18
Slection des lments
item_background.xml:
< s e l e c t o r x m l n s : a n d r o i d = " . . . " >
< i t e m a n d r o i d : s t a t e _ s e l e c t e d = " t r u e "
a n d r o i d : d r a w a b l e = " @ d r a w a b l e / s e l e c t e d _ i t e m _ b a c k g r o u n d " / >
< i t e m a n d r o i d : d r a w a b l e = " @ d r a w a b l e / n o r m a l _ i t e m _ b a c k g r o u n d " / >
< / s e l e c t o r >
selected_item_background.xml:
< r i p p l e x m l n s : a n d r o i d = " . . . "
a n d r o i d : c o l o r = " ? a n d r o i d : c o l o r M u l t i S e l e c t H i g h l i g h t " >
< i t e m a n d r o i d : i d = " @ a n d r o i d : i d / m a s k "
a n d r o i d : d r a w a b l e = " @ a n d r o i d : c o l o r / w h i t e " / >
< / r i p p l e >
8 . 19
Slection des lments
normal_item_background.xml:
< r i p p l e x m l n s : a n d r o i d = " . . . "
a n d r o i d : c o l o r = " @ a n d r o i d : c o l o r / w h i t e " >
< i t e m a n d r o i d : d r a w a b l e = " ? a n d r o i d : c o l o r M u l t i S e l e c t H i g h l i g h t " / >
< / r i p p l e >
layout_item.xml:
< R e l a t i v e L
a y o u t x m l n s : a n d r o i d = " . . . "
a n d r
o i d : l a y o u t _ w i d t h = " f i l l _ p a r e n t "
a n d r
o i d : l a y o u t _ h e i g h t = " f i l l _ p a r e n t "
a n d r
o i d : b a c k g r o u n d = " @ d r a w a b l e / i t e m _ b a c k g r o u n d " >
< T e x
t V i e w
a n d r o i d : i d = " @ + i d / t e x t "
a n d r o i d : l a y o u t _ w i d t h = " m a t c h _ p a r e n t "
a n d r o i d : l a y o u t _ h e i g h t = " m a t c h _ p a r e n t " / >
< / R e l a t i v e L a y o u t >
8 . 20
Slection des lments
Communica ondeslmentsslec onnsl'adaptateur:
p u b l i c c l a s s I t e m A d a p t e r
e x t e n d s R e c y c l e r V i e w . A d a p t e r < I t e m A d a p t e r . V i e w H o l d e r > {
p r i v a t e f i n a l L i s t < S t r i n g > d a t a s e t ;
p r i v a t e f i n a l S p a r s e B o o l e a n A r r a y s e l e c t e d I t e m s ;
p u b l i c I t e m A d a p t e r ( L i s t < S t r i n g > d a t a s e t ,
S p a r s e B o o l e a n A r r a y s e l e c t e d I t e m s ) {
t h i s . d a t a s e t = d a t a s e t ; t h i s . s e l e c t e d I t e m s = s e l e c t e d I t e m s ;
}
}
p u b l i c c l a s s M a i n A c t i v i t y e x t e n d s A c t i v i t y
i m p l e m e n t s D i a l o g F r a g m e n t L i s t e n e r {
@ O v e r r i d e
p r o t e c t e d v o i d o n C r e a t e ( B u n d l e s a v e d I n s t a n c e S t a t e ) {
/ * . . . * / a d a p t e r = n e w I t e m A d a p t e r ( d a t a s e t , s e l e c t e d I t e m s ) ; / * . . . * /
}
}
8 . 21
Slection des lments
Miseenplacedunouveaulayout:
p u b l i c c l a s s I t e m A d a p t e r
e x t e n d s R e c y c l e r V i e w . A d a p t e r < I t e m A d a p t e r . V i e w H o l d e r > {
@ O v e r r i d e
p u b l i c V i e w H o l d e r o n C r e a t e V i e w H o l d e r ( V i e w G r o u p v i e w G r o u p ,
i n t i n d e x ) {
V i e w v i e w = L a y o u t I n f l a t e r . f r o m ( v i e w G r o u p . g e t C o n t e x t ( ) )
. i n f l a t e ( R . l a y o u t . l a y o u t _ i t e m , v i e w G r o u p , f a l s e ) ;
V i e w H o l d e r v i e w H o l d e r = n e w V i e w H o l d e r ( v i e w ) ;
v i e w H o l d e r . b i n d ( i n d e x ) ;
r e t u r n v i e w H o l d e r ;
}
8 . 22
Slection des lments
p u b l i c c l a s s V i e w H o l d e r e x t e n d s R e c y c l e r V i e w . V i e w H o l d e r {
i n t i n d e x ;
p u b l i c v o i d b i n d ( i n t i n d e x ) {
/ * . . . * /
i t e m V i e w . s e t S e l e c t e d ( s e l e c t e d I t e m s . g e t ( i n d e x ) ) ;
}
/ * . . . * /
}
}
8 . 23
Le mode "action"
Noussouhaitonspouvoirsupprimerleslmentsslec onns:
8 . 24
Le mode "action"
< m e n u x m l n s : a n d r o i d = " . . . " >
< i t e m a n d r o i d : i d = " @ + i d / a c t i o n _ d e l e t e "
a n d r o i d : t i t l e = " @ s t r i n g / d e l e t e "
a n d r o i d : i c o n = " @ a n d r o i d : d r a w a b l e / i c _ m e n u _ d e l e t e "
a n d r o i d : s h o w A s A c t i o n = " i f R o o m " / >
< / m e n u >
p u b l i c c l a s s M a i n A c t i v i t y e x t e n d s A c t i v i t y
i m p l e m e n t s D i a l o g F r a g m e n t L i s t e n e r {
/ * . . . * /
p r i v a t e v o i d s w a p I t e m S e l e c t i o n ( i n t i n d e x ) {
/ * . . . * / u p d a t e A c t i o n M o d e ( ) ;
}
p r i v a t e v o i d u p d a t e A c t i o n M o d e ( ) {
b o o l e a n o l d S e l e c t i o n M o d e A c t i v a t e d = a c t i o n M o d e ! = n u l l ;
b o o l e a n s e l e c t i o n M o d e A c t i v a t e d = n u m b e r O f S e l e c t e d I t e m s > 0 ;
i f ( s e l e c t i o n M o d e A c t i v a t e d = = o l d S e l e c t i o n M o d e A c t i v a t e d ) r e t u r n ;
i f ( s e l e c t i o n M o d e A c t i v a t e d ) {
a c t i o n M o d e = s t a r t A c t i o n M o d e ( a c t i o n M o d e C a l l b a c k ) ;
r e t u r n ;
} e l s e a c t i o n M o d e . f i n i s h ( ) ;
}
}
8 . 25
Le mode "action"
p u b l i c c l a s s M a i n A c t i v i t y e x t e n d s A c t i v i t y
i m p l e m e n t s D i a l o g F r a g m e n t L i s t e n e r {
p r i v a t e A c t i o n M o d e . C a l l b a c k a c t i o n M o d e C a l l b a c k
= n e w A c t i o n M o d e C a l l b a c k ( ) ;
p r i v a t e c l a s s A c t i o n M o d e C a l l b a c k i m p l e m e n t s A c t i o n M o d e . C a l l b a c k {
@ O v e r r i d e
p u b l i c b o o l e a n o n C r e a t e A c t i o n M o d e ( A c t i o n M o d e m o d e , M e n u m e n u ) {
M e n u I n f l a t e r i n f l a t e r = m o d e . g e t M e n u I n f l a t e r ( ) ;
i n f l a t e r . i n f l a t e ( R . m e n u . m e n u _ a c t i o n m o d e , m e n u ) ;
r e t u r n t r u e ;
}
/ * . . . * /
}
}
8 . 26
Le mode "action"
8 . 27
Le mode "action"
@ O v e r r i d e
p u b l i c b o o l e a n o n P r e p a r e A c t i o n M o d e ( A c t i o n M o d e m o d e , M e n u m e n u ) {
r e t u r n f a l s e ;
}
@ O v e r r i d e
p u b l i c v o i d o n D e s t r o y A c t i o n M o d e ( A c t i o n M o d e m o d e ) {
c l e a r S e l e c t i o n ( ) ;
a c t i o n M o d e = n u l l ;
}
}
}
8 . 28
Le mode "action"
Suppressiondeslmentsdumodle:
p u b l i c c l a s s M a i n A c t i v i t y e x t e n d s A c t i v i t y
i m p l e m e n t s D i a l o g F r a g m e n t L i s t e n e r {
p r i v a t e v o i d d e l e t e S e l e c t e d I t e m s ( ) {
f o r ( i n t i n d e x = s e l e c t e d I t e m s . s i z e ( ) - 1 ; i n d e x > = 0 ; i n d e x - - )
i f ( s e l e c t e d I t e m s . v a l u e A t ( i n d e x ) )
d a t a s e t . r e m o v e ( s e l e c t e d I t e m s . k e y A t ( i n d e x ) ) ;
c l e a r S e l e c t i o n ( ) ;
u p d a t e A c t i o n M o d e ( ) ;
a d a p t e r . n o t i f y D a t a S e t C h a n g e d ( ) ;
}
}
8 . 29
Exemple d'utilisation des prfrences
9.1
Exemple d'utilisation des prfrences
9.2
Exemple d'utilisation des prfrences
9.3
Structure des prfrences
UnchierXMLdcritlastructuredespfrences:
< P r e f e r e n c e S c r e e n x m l n s : a n d r o i d = " . . . " >
< C h e c k B o x P r e f e r e n c e
a n d r o i d : k e y = " p r e f _ c h e c k b o x "
a n d r o i d : t i t l e = " @ s t r i n g / c h e c k b o x _ t i t l e "
a n d r o i d : d e f a u l t V a l u e = " t r u e " / >
< E d i t T e x t P r e f e r e n c e
a n d r o i d : k e y = " p r e f _ t e x t "
a n d r o i d : d e p e n d e n c y = " p r e f _ c h e c k b o x "
a n d r o i d : t i t l e = " @ s t r i n g / t e x t _ t i t l e " / >
< L i s t P r e f e r e n c e
a n d r o i d : k e y = " p r e f _ l i s t "
a n d r o i d : t i t l e = " @ s t r i n g / l i s t _ t i t l e "
a n d r o i d : e n t r i e s = " @ a r r a y / l i s t _ e n t r i e s "
a n d r o i d : e n t r y V a l u e s = " @ a r r a y / l i s t _ v a l u e s "
a n d r o i d : d e f a u l t V a l u e = " @ s t r i n g / l i s t _ d e f a u l t " / >
< / P r e f e r e n c e S c r e e n >
9.4
Les tableaux de chanes de caractres
Lestableauxdevaleurspourlaliste(chier values/arrays.xml):
< s o u r c e s >
< s t r i n g - a r r a y n a m e = " l i s t _ e n t r i e s " >
< i t e m > v a l u e A < / i t e m >
< i t e m > v a l u e B < / i t e m >
< i t e m > v a l u e C < / i t e m >
< / s t r i n g - a r r a y >
< s t r i n g - a r r a y n a m e = " l i s t _ v a l u e s " >
< i t e m > A < / i t e m >
< i t e m > B < / i t e m >
< i t e m > C < / i t e m >
< / s t r i n g - a r r a y >
< / r e s o u r c e s >
9.5
Cration du Fragment Prfrences
Lecoded'unFragmentachantlesprfrences:
p u b l i c c l a s s S e t t i n g s F r a g m e n t e x t e n d s P r e f e r e n c e F r a g m e n t {
@ O v e r r i d e
p u b l i c v o i d o n C r e a t e ( B u n d l e s a v e d I n s t a n c e S t a t e ) {
s u p e r . o n C r e a t e ( s a v e d I n s t a n c e S t a t e ) ;
a d d P r e f e r e n c e s F r o m R e s o u r c e ( R . x m l . s e t t i n g s ) ;
}
Lesprfrencessontautoma quementsauvegardes
9.6
Mise jour du Fragment
MiseenjourduFragmentenfonc ondeschangements:
9.7
couter les changements
MiseenjourduFragmentenfonc ondeschangements:
p u b l i c c l a s s S e t t i n g s F r a g m e n t e x t e n d s P r e f e r e n c e F r a g m e n t
i m p l e m e n t s S h a r e d P r e f e r e n c e s . O n S h a r e d P r e f e r e n c e C h a n g e L i s t e n e r {
@ O v e r r i d e
p u b l i c v o i d o n R e s u m e ( ) {
s u p e r . o n R e s u m e ( ) ;
g e t P r e f e r e n c e S c r e e n ( ) . g e t S h a r e d P r e f e r e n c e s ( )
. r e g i s t e r O n S h a r e d P r e f e r e n c e C h a n g e L i s t e n e r ( t h i s ) ;
}
@ O v e r r i d e
p u b l i c v o i d o n P a u s e ( ) {
s u p e r . o n P a u s e ( ) ;
g e t P r e f e r e n c e S c r e e n ( ) . g e t S h a r e d P r e f e r e n c e s ( )
. u n r e g i s t e r O n S h a r e d P r e f e r e n c e C h a n g e L i s t e n e r ( t h i s ) ;
}
}
9.8
couter les changements
Implmenta ondelamthodeduListeneretmisejourdelavue:
p u b l i c c l a s s S e t t i n g s F r a g m e n t e x t e n d s P r e f e r e n c e F r a g m e n t
i m p l e m e n t s S h a r e d P r e f e r e n c e s . O n S h a r e d P r e f e r e n c e C h a n g e L i s t e n e r {
@ O v e r r i d e
p u b l i c v o i d o n S h a r e d P r e f e r e n c e C h a n g e d ( S h a r e d P r e f e r e n c e s p r e f e r e n c e s ,
S t r i n g k e y ) {
u p d a t e S u m m a r y ( p r e f e r e n c e s , k e y ) ;
}
p r i v a t e v o i d u p d a t e S u m m a r y ( S h a r e d P r e f e r e n c e s p r e f e r e n c e s ,
S t r i n g k e y ) {
i f ( k e y . e q u a l s ( " p r e f _ t e x t " ) | | k e y . e q u a l s ( " p r e f _ l i s t " ) ) {
P r e f e r e n c e p r e f e r e n c e = f i n d P r e f e r e n c e ( k e y ) ;
p r e f e r e n c e . s e t S u m m a r y ( p r e f e r e n c e s . g e t S t r i n g ( k e y , " " ) ) ;
}
}
}
9.9
couter les changements
Misejourdelavuelacra on:
p u b l i c c l a s s S e t t i n g s F r a g m e n t e x t e n d s P r e f e r e n c e F r a g m e n t
i m p l e m e n t s S h a r e d P r e f e r e n c e s . O n S h a r e d P r e f e r e n c e C h a n g e L i s t e n e r {
@ O v e r r i d e
p u b l i c v o i d o n C r e a t e ( B u n d l e s a v e d I n s t a n c e S t a t e ) {
s u p e r . o n C r e a t e ( s a v e d I n s t a n c e S t a t e ) ;
a d d P r e f e r e n c e s F r o m R e s o u r c e ( R . x m l . s e t t i n g s ) ;
S h a r e d P r e f e r e n c e s s h a r e d P r e f e r e n c e s =
g e t P r e f e r e n c e S c r e e n ( ) . g e t S h a r e d P r e f e r e n c e s ( ) ;
u p d a t e S u m m a r y ( s h a r e d P r e f e r e n c e s , " p r e f _ t e x t " ) ;
u p d a t e S u m m a r y ( s h a r e d P r e f e r e n c e s , " p r e f _ l i s t " ) ;
}
}
9 . 10
couter les changements
Misejourdelavuelacra on:
p u b l i c c l a s s M a i n F r a g m e n t e x t e n d s F r a g m e n t {
p r i v a t e T e x t V i e w t e x t V i e w ;
@ O v e r r i d e
p u b l i c V i e w o n C r e a t e V i e w ( L a y o u t I n f l a t e r i n f l a t e r ,
V i e w G r o u p c o n t a i n e r ,
B u n d l e s a v e d I n s t a n c e S t a t e ) {
V i e w v i e w = i n f l a t e r . i n f l a t e ( R . l a y o u t . f r a g m e n t _ m a i n , c o n t a i n e r , f a l s e ) ;
t e x t V i e w = ( T e x t V i e w ) v i e w . f i n d V i e w B y I d ( R . i d . t e x t V i e w ) ;
S h a r e d P r e f e r e n c e s s h a r e d P r e f e r e n c e s =
P r e f e r e n c e M a n a g e r . g e t D e f a u l t S h a r e d P r e f e r e n c e s ( g e t A c t i v i t y ( ) ) ;
u p d a t e V i e w W i t h S e t t i n g s ( s h a r e d P r e f e r e n c e s ) ;
r e t u r n v i e w ;
}
p r i v a t e v o i d u p d a t e V i e w W i t h S e t t i n g s ( S h a r e d P r e f e r e n c e s s h a r e d P r e f e r e n c e s ) {
b o o l e a n c h e c k b o x V a l u e = s h a r e d P r e f e r e n c e s . g e t B o o l e a n ( " p r e f _ c h e c k b o x " , t r u e ) ;
S t r i n g t e x t V a l u e = s h a r e d P r e f e r e n c e s . g e t S t r i n g ( " p r e f _ t e x t " , " " ) ;
S t r i n g l i s t V a l u e = s h a r e d P r e f e r e n c e s . g e t S t r i n g ( " p r e f _ l i s t " , " " ) ;
t e x t V i e w . s e t T e x t ( c h e c k b o x V a l u e + " \ n " + t e x t V a l u e + " \ n " + l i s t V a l u e ) ;
}
}
9 . 11
Vue du fragment principal
Cra ondelavue:
p u b l i c c l a s s M a i n F r a g m e n t e x t e n d s F r a g m e n t {
p r i v a t e T e x t V i e w t e x t V i e w ;
@ O v e r r i d e
p u b l i c V i e w o n C r e a t e V i e w ( L a y o u t I n f l a t e r i n f l a t e r ,
V i e w G r o u p c o n t a i n e r ,
B u n d l e s a v e d I n s t a n c e S t a t e ) {
V i e w v i e w = i n f l a t e r . i n f l a t e ( R . l a y o u t . f r a g m e n t _ m a i n ,
c o n t a i n e r , f a l s e ) ;
t e x t V i e w = ( T e x t V i e w ) v i e w . f i n d V i e w B y I d ( R . i d . t e x t V i e w ) ;
S h a r e d P r e f e r e n c e s s h a r e d P r e f e r e n c e s =
P r e f e r e n c e M a n a g e r . g e t D e f a u l t S h a r e d P r e f e r e n c e s ( g e t A c t i v i t y ( ) ) ;
u p d a t e V i e w ( s h a r e d P r e f e r e n c e s ) ;
r e t u r n v i e w ;
}
p r i v a t e v o i d u p d a t e V i e w ( S h a r e d P r e f e r e n c e s p r e f e r e n c e s ) { / * . . . * / }
}
9 . 12
Rcupration des prfrences
Rcupra ondesvaleursdesprfrences:
p u b l i c c l a s s M a i n F r a g m e n t e x t e n d s F r a g m e n t {
p r i v a t e T e x t V i e w t e x t V i e w ;
p r i v a t e v o i d u p d a t e V i e w ( S h a r e d P r e f e r e n c e s p r e f e r e n c e s ) {
b o o l e a n c h e c k b o x V a l u e =
p r e f e r e n c e s . g e t B o o l e a n ( " p r e f _ c h e c k b o x " , t r u e ) ;
S t r i n g t e x t V a l u e =
p r e f e r e n c e s . g e t S t r i n g ( " p r e f _ t e x t " , " " ) ;
S t r i n g l i s t V a l u e =
p r e f e r e n c e s . g e t S t r i n g ( " p r e f _ l i s t " , " " ) ;
t e x t V i e w . s e t T e x t ( c h e c k b o x V a l u e +
" \ n " + t e x t V a l u e +
" \ n " + l i s t V a l u e ) ;
}
}
9 . 13
coute des changements de prfrences
couteduchangementdeprfrences:
p u b l i c c l a s s M a i n F r a g m e n t e x t e n d s F r a g m e n t
i m p l e m e n t s S h a r e d P r e f e r e n c e s . O n S h a r e d P r e f e r e n c e C h a n g e L i s t e n e r {
@ O v e r r i d e
p u b l i c v o i d o n R e s u m e ( ) {
s u p e r . o n R e s u m e ( ) ;
P r e f e r e n c e M a n a g e r . g e t D e f a u l t S h a r e d P r e f e r e n c e s ( g e t A c t i v i t y ( ) ) .
r e g i s t e r O n S h a r e d P r e f e r e n c e C h a n g e L i s t e n e r ( t h i s ) ;
}
@ O v e r r i d e
p u b l i c v o i d o n P a u s e ( ) {
P r e f e r e n c e M a n a g e r . g e t D e f a u l t S h a r e d P r e f e r e n c e s ( g e t A c t i v i t y ( ) ) .
r e g i s t e r O n S h a r e d P r e f e r e n c e C h a n g e L i s t e n e r ( t h i s ) ;
s u p e r . o n P a u s e ( ) ;
}
}
9 . 14
coute des changements de prfrences
Modica ondelavuelorsquelesprfrenceschangent:
p u b l i c c l a s s M a i n F r a g m e n t e x t e n d s F r a g m e n t
i m p l e m e n t s S h a r e d P r e f e r e n c e s . O n S h a r e d P r e f e r e n c e C h a n g e L i s t e n e r {
@ O v e r r i d e
p u b l i c v o i d o n S h a r e d P r e f e r e n c e C h a n g e d ( S h a r e d P r e f e r e n c e s p r e f e r e n c e s ,
S t r i n g k e y ) {
u p d a t e V i e w ( p r e f e r e n c e s ) ;
}
}
9 . 15
Mise en place du menu
Inser ondumenudansleFragmentprincipal:
p u b l i c c l a s s M a i n F r a g m e n t e x t e n d s F r a g m e n t
i m p l e m e n t s S h a r e d P r e f e r e n c e s . O n S h a r e d P r e f e r e n c e C h a n g e L i s t e n e r {
@ O v e r r i d e
p u b l i c v o i d o n C r e a t e ( B u n d l e s a v e d I n s t a n c e S t a t e ) {
s u p e r . o n C r e a t e ( s a v e d I n s t a n c e S t a t e ) ;
s e t H a s O p t i o n s M e n u ( t r u e ) ;
}
@ O v e r r i d e
p u b l i c v o i d o n C r e a t e O p t i o n s M e n u ( M e n u m e n u , M e n u I n f l a t e r i n f l a t e r ) {
i n f l a t e r . i n f l a t e ( R . m e n u . m e n u _ m a i n , m e n u ) ;
}
}
9 . 16
Mise en place du menu
< m e n u x m l n s : a n d r o i d = " . . . " >
< i t e m
a n d r o i d : i d = " @ + i d / a c t i o n _ s e t t i n g s "
a n d r o i d : t i t l e = " @ s t r i n g / a c t i o n _ s e t t i n g s "
a n d r o i d : o r d e r I n C a t e g o r y = " 1 0 0 "
a n d r o i d : i c o n = " @ a n d r o i d : d r a w a b l e / i c _ m e n u _ p r e f e r e n c e s "
a n d r o i d : s h o w A s A c t i o n = " a l w a y s " / >
< / m e n u >
}
9 . 17
L'activit principale
Cra ondelavue:
p u b l i c c l a s s M a i n A c t i v i t y e x t e n d s A c t i v i t y {
@ O v e r r i d e
p r o t e c t e d v o i d o n C r e a t e ( B u n d l e s a v e d I n s t a n c e S t a t e ) {
s u p e r . o n C r e a t e ( s a v e d I n s t a n c e S t a t e ) ;
s e t C o n t e n t V i e w ( R . l a y o u t . a c t i v i t y _ m a i n ) ;
i f ( s a v e d I n s t a n c e S t a t e = = n u l l ) {
g e t F r a g m e n t M a n a g e r ( ) . b e g i n T r a n s a c t i o n ( )
. a d d ( R . i d . c o n t a i n e r , n e w M a i n F r a g m e n t ( ) )
. c o m m i t ( ) ;
}
}
}
9 . 18
L'activit principale
Traitementdesvnementsdumenu:
p u b l i c c l a s s M a i n A c t i v i t y e x t e n d s A c t i v i t y {
@ O v e r r i d e
p u b l i c b o o l e a n o n O p t i o n s I t e m S e l e c t e d ( M e n u I t e m i t e m ) {
i f ( i t e m . g e t I t e m I d ( ) = = R . i d . a c t i o n _ s e t t i n g s ) {
o p e n S e t t i n g s ( ) ;
r e t u r n t r u e ;
}
r e t u r n s u p e r . o n O p t i o n s I t e m S e l e c t e d ( i t e m ) ;
}
}
9 . 19
L'activit principale
OuvertureduFragment Prfrences:
p u b l i c c l a s s M a i n A c t i v i t y e x t e n d s A c t i v i t y {
p r i v a t e v o i d o p e n S e t t i n g s ( ) {
g e t F r a g m e n t M a n a g e r ( ) . b e g i n T r a n s a c t i o n ( )
. r e p l a c e ( R . i d . c o n t a i n e r , n e w S e t t i n g s F r a g m e n t ( ) )
. a d d T o B a c k S t a c k ( " r e s u l t " )
. c o m m i t ( ) ;
}
}
9 . 20
Les fichiers
Stockageinterne:
Toujoursdisponible
Pardfaut,accessibleuniquementparvotreapplica on
FichiersSupprimsladsinstalla ondel'applica on
Sockageexterne:
Pastoujoursdisponible(USB,etc.)
FichiersAccessiblesetmodiablespartoutlemonde
Seulsleschiersdurpertoire getExternalFilesDir()sont
supprimsladsinstalla ondel'applica on
Ncessitedespermissions
U lepourpartagerdesdonnesentreapplica ons
10 . 1
Crer un fichier dans le stockage interne
Deuxrpertoires:
getFilesDir():Lerpertoireinternedevotreapplica on
getCacheDir():lecacheinternedevotreapplica on
Pourcrerunchierdansl'undecesrpertoires:
F i l e f i l e = n e w F i l e ( c o n t e x t . g e t F i l e s D i r ( ) , " f i c h i e r . t x t " ) ;
ou
F i l e O u t p u t S t r e a m o u t p u t S t r e a m
= o p e n F i l e O u t p u t ( " f i c h i e r . t x t " , C o n t e x t . M O D E _ P R I V A T E ) ;
ou
F i l e f i l e
= F i l e . c r e a t e T e m p F i l e ( " f i c h i e r " , " t m p " , c o n t e x t . g e t C a c h e D i r ( ) ) ;
10 . 2
crire et lire des donnes dans un fichier
Noussouhaitonscrireunditeurdechier:
10 . 3
crire et lire des donnes dans un fichier
Supposonsquenousayonsl'ac vitsuivante:
p u b l i c c l a s s M a i n A c t i v i t y e x t e n d s A c t i v i t y {
p r i v a t e E d i t T e x t e d i t T e x t ;
@ O v e r r i d e
p r o t e c t e d v o i d o n C r e a t e ( B u n d l e s a v e d I n s t a n c e S t a t e ) {
s u p e r . o n C r e a t e ( s a v e d I n s t a n c e S t a t e ) ;
s e t C o n t e n t V i e w ( R . l a y o u t . a c t i v i t y _ m a i n ) ;
e d i t T e x t = ( E d i t T e x t ) f i n d V i e w B y I d ( R . i d . e d i t T e x t ) ;
}
}
10 . 4
crire et lire des donnes dans un fichier
Dclenchementdel'critureetdelalectureduchier:
p u b l i c c l a s s M a i n A c t i v i t y e x t e n d s A c t i v i t y {
p r i v a t e E d i t T e x t e d i t T e x t ;
@ O v e r r i d e
p r o t e c t e d v o i d o n S t a r t ( ) {
s u p e r . o n R e s u m e ( ) ;
e d i t T e x t . s e t T e x t ( l o a d ( ) ) ;
}
@ O v e r r i d e
p r o t e c t e d v o i d o n S t o p ( ) {
s u p e r . o n P a u s e ( ) ;
s a v e ( e d i t T e x t . g e t T e x t ( ) . t o S t r i n g ( ) ) ;
}
}
10 . 5
crire et lire des donnes dans un fichier
Lasauvegarde:
p r i v a t e v o i d s a v e ( S t r i n g s t r i n g ) {
F i l e f i l e = n e w F i l e ( g e t F i l e s D i r ( ) , f i l e n a m e ) ;
t r y ( B u f f e r e d W r i t e r w r i t e r =
n e w B u f f e r e d W r i t e r ( n e w F i l e W r i t e r ( f i l e ) ) ) {
w r i t e r . w r i t e ( s t r i n g ) ;
} c a t c h ( I O E x c e p t i o n e ) {
T o a s t . m a k e T e x t ( t h i s ,
g e t S t r i n g ( R . s t r i n g . r e a d _ e r r o r ) ,
T o a s t . L E N G T H _ L O N G ) ;
}
}
10 . 6
crire et lire des donnes dans un fichier
Lalecture:
p r i v a t e S t r i n g l o a d ( ) {
F i l e f i l e = n e w F i l e ( g e t F i l e s D i r ( ) , f i l e n a m e ) ;
i f ( ! f i l
e . e x i s t s ( ) ) r e t u r n " " ;
t r y ( B u f
f e r e d R e a d e r r e a d e r =
n e w B u f f e r e d R e a d e r ( n e w F i l e R e a d e r ( f i l e ) ) ) {
r e t u r n l o a d ( r e a d e r ) ;
} c a t c h ( I O E x c e p t i o n e ) {
T o a s t . m a k e T e x t ( t h i s ,
g e t S t r i n g ( R . s t r i n g . r e a d _ e r r o r ) ,
T o a s t . L E N G T H _ L O N G ) ;
r e t u r n " " ;
}
}
10 . 7
crire et lire des donnes dans un fichier
Lalecture:
p r i v a t e S t r i n g l o a d ( B u f f e r e d R e a d e r r e a d e r ) t h r o w s I O E x c e p t i o n {
S t r i n g B u i l d e r b u i l d e r = n e w S t r i n g B u i l d e r ( ) ;
f o r ( ; ; ) {
S t r i n g l i n e = r e a d e r . r e a d L i n e ( ) ;
i f ( l i n e = = n u l l ) b r e a k ;
b u i l d e r . a p p e n d ( l i n e ) . a p p e n d ( " \ n " ) ;
}
r e t u r n b u i l d e r . t o S t r i n g ( ) ;
}
10 . 8
Permissions pour le stockage externe
Ilsutd'ajouterlespermissionsdanslemanifestedel'applica on:
Pourl'criture:
< m a n i f e s t >
< u s e s - p e r m i s s i o n
a n d r o i d : n a m e = " a n d r o i d . p e r m i s s i o n . W R I T E _ E X T E R N A L _ S T O R A G E " / >
< / m a n i f e s t >
Pourlalecture:
< m a n i f e s t >
< u s e s - p e r m i s s i o n
a n d r o i d : n a m e = " a n d r o i d . p e r m i s s i o n . R E A D _ E X T E R N A L _ S T O R A G E " / >
< / m a n i f e s t >
10 . 9
Un exemple d'application
Noussouhaitonsparcouriretlireleschiersdustockageexterne:
Deuxtypesdefragments:
Achaged'unrpertoire: DirectoryFragment
Achageducontenud'unchier: FileFragment
Affichage du contenu d'un fichier
10
10 .. 11
10
Affichage du contenu d'un fichier
p u b l i c s t a t i c F i l e F r a g m e n t n e w I n s t a n c e ( S t r i n g f i l e n a m e ) {
F i l e F r a g m e n t f r a g m e n t = n e w F i l e F r a g m e n t ( ) ;
B u n d l e a r g s = n e w B u n d l e ( ) ;
a r g s . p u t S t r i n g ( " p a t h " , f i l e n a m e ) ;
f r a g m e n t . s e t A r g u m e n t s ( a r g s ) ;
r e t u r n f r a g m e n t ;
}
p r i v a t e S t r i n g p a t h ( ) { r e t u r n g e t A r g u m e n t s ( ) . g e t S t r i n g ( " p a t h " ) ; }
10 . 12
Affichage du contenu d'un fichier
Cra ondelavueetges onducycledevie:
p u b l i c c l a s s F i l e F r a g m e n t e x t e n d s F r a g m e n t {
p r i v a t e T e x t V i e w t e x t V i e w ;
p u b l i c V i e w o n C r e a t e V i e w ( L a y o
u t I n f l a t e r i n f l a t e r ,
V i e w
G r o u p c o n t a i n e r ,
B u n d
l e s a v e d I n s t a n c e S t a t e ) {
V i e w v i e w = i n f l a t e r . i n f l a t
e ( R . l a y o u t . f r a g m e n t _ f i l e ,
c o n t a i n e r , f a l s e ) ;
t e x t V i e w = ( T e x t V i e w ) v i e w . f i n d V i e w B y I d ( R . i d . t e x t V i e w ) ;
r e t u r n v i e w ;
}
p u b l i c v o i d o n R e s u m e ( ) {
s u p e r . o n R e s u m e ( ) ; t e x t V i e w . s e t T e x t ( l o a d ( ) ) ;
g e t A c t i v i t y ( ) . s e t T i t l e ( p a t h ( ) ) ;
}
}
10 . 13
Affichage du contenu d'un fichier
Chargementducontenuduchier:
p u b l i c c l a s s F i l e F r a g m e n t e x t e n d s F r a g m e n t {
p r i v a t e S t r i n g l o a d ( ) {
F i l e f i l e = n e w F i l e ( p a t h ( ) ) ;
i f ( ! f i l e . e x i s t s ( ) ) r e t u r n " " ;
t r y ( B u f f e r e d R e a d e r r e a d e r =
n e w B u f f e r e d R e a d e r ( n e w F i l e R e a d e r ( f i l e ) ) ) {
r e t u r n l o a d ( r e a d e r ) ;
} c a t c h ( I O E x c e p t i o n e ) {
T o a s t . m a k e T e x t ( t h i s . g e t A c t i v i t y ( ) ,
g e t S t r i n g ( R . s t r i n g . r e a d _ e r r o r ) ,
T o a s t . L E N G T H _ L O N G ) ;
r e t u r n " " ;
}
}
}
10 . 14
Affichage du contenu d'un fichier
Chargementducontenuduchier:
p u b l i c c l a s s F i l e F r a g m e n t e x t e n d s F r a g m e n t {
p r i v a t e S t r i n g l o a d ( B u f f e r e d R e a d e r r e a d e r ) t h r o w s I O E x c e p t i o n {
S t r i n g B u i l d e r b u i l d e r = n e w S t r i n g B u i l d e r ( ) ;
f o r ( ; ; ) {
S t r i n g l i n e = r e a d e r . r e a d L i n e ( ) ;
i f ( l i n e = = n u l l ) b r e a k ;
b u i l d e r . a p p e n d ( l i n e ) . a p p e n d ( " \ n " ) ;
}
r e t u r n b u i l d e r . t o S t r i n g ( ) ;
}
}
10 . 15
Affichage du contenu d'un rpertoire
Cra ondel'instance:
p u b l i c c l a s s D i r e c t o r y F r a g m e n t e x t e n d s L i s t F r a g m e n t {
p u b l i c s t a t i c D i r e c t o r y F r a g m e n t n e w I n s t a n c e ( S t r i n g p a t h ) {
D i r e c t o r y F r a g m e n t f r a g m e n t = n e w D i r e c t o r y F r a g m e n t ( ) ;
B u n d l e a r g s = n e w B u n d l e ( ) ;
a r g s . p u t S t r i n g ( " p a t h " , p a t h ) ;
f r a g m e n t . s e t A r g u m e n t s ( a r g s ) ;
r e t u r n f r a g m e n t ;
}
p r i v a t e S t r i n g p a t h ( ) { r e t u r n g e t A r g u m e n t s ( ) . g e t S t r i n g ( " p a t h " ) ; }
}
10 . 16
Affichage du contenu d'un rpertoire
Cra ondelavueetges onducycledevie:
p u b l i c c l a s s D i r e c t o r y F r a g m e n t e x t e n d s L i s t F r a g m e n t {
p r i v a t e S t r i n g [ ] f i l e s ;
v o i d o n C r e a t e ( B u n d l e s a v e d I n s t a n c e S t a t e ) {
s u p e r . o n C r e a t e ( s a v e d I n s t a n c e S t a t e ) ;
F i l e d i r e c t o r y = n e w F i l e ( p a t h ( ) ) ;
f i l e s = d i r e c t o r y . l i s t ( ) ;
s e t L i s t A d a p t e r ( n e w A r r a y A d a p t e r < > ( g e t A c t i v i t y ( ) ,
a n d r o i d . R . l a y o u t . s i m p l e _ l i s t _ i t e m _ 1 ,
a n d r o i d . R . i d . t e x t 1 , f i l e s ) ) ;
}
p u b l i c v o i d o n R e s u m e ( ) {
s u p e r . o n R e s u m e ( ) ;
g e t A c t i v i t y ( ) . s e t T i t l e ( p a t h ( ) ) ;
}
}
10 . 17
Affichage du contenu d'un rpertoire
p u b l i c i n t e r f a c e O n D i r e c t o r y F r a g m e n t L i s t e n e r {
p u b l i c v o i d o n C h a n g e P a t h ( S t r i n g p a t h ) ;
}
}
10 . 18
Affichage du contenu d'un rpertoire
Miseenplacedesno ca onsdel'ac vit:
p u b l i c c l a s s D i r e c t o r y F r a g m e n t e x t e n d s L i s t F r a g m e n t {
p r i v a t e O n D i r e c t o r y F r a g m e n t L i s t e n e r l i s t e n e r ;
@ O v e r r i d e
p u b l i c v o i d o n A t t a c h ( A c t i v i t y a c t i v i t y ) {
s u p e r . o n A t t a c h ( a c t i v i t y ) ;
t r y {
l i s t e n e r = ( O n D i r e c t o r y F r a g m e n t L i s t e n e r ) a c t i v i t y ;
} c a t c h ( C l a s s C a s t E x c e p t i o n e ) {
t h r o w n e w C l a s s C a s t E x c e p t i o n ( a c t i v i t y . t o S t r i n g ( )
+ " m u s t i m p l e m e n t O n D i r e c t o r y F r a g m e n t L i s t e n e r " ) ;
}
}
@ O v e r r i d e
p u b l i c v o i d o n D e t a c h ( ) { s u p e r . o n D e t a c h ( ) ; l i s t e n e r = n u l l ; }
}
10 . 19
Affichage du contenu d'un rpertoire
@ O v e r r i d e
p u b l i c v o i d o n L i s t I t e m C l i c k ( L i s t V i e w l i s t ,
V i e w v i e w ,
i n t p o s i t i o n , l o n g i d ) {
s u p e r . o n L i s t I t e m C l i c k ( l i s t , v i e w , p o s i t i o n , i d ) ;
i f ( n u l l ! = l i s t e n e r ) {
S t r i n g p a t h = p a t h ( ) . e q u a l s ( " / " ) ? " " : p a t h ( ) ;
l i s t e n e r . o n C h a n g e P a t h ( p a t h + " / " + f i l e s [ p o s i t i o n ] ) ;
}
}
}
10 . 20
L'activit principale
Cra ondelelavue:
p u b l i c c l a s s M a i n A c t i v i t y e x t e n d s A c t i v i t y {
@ O v e r r i d e
p r o t e c t e d v o i d o n C r e a t e ( B u n d l e s a v e d I n s t a n c e S t a t e ) {
s u p e r . o n C r e a t e ( s a v e d I n s t a n c e S t a t e ) ;
s e t C o n t e n t V i e w ( R . l a y o u t . a c t i v i t y _ m a i n ) ;
i f ( s a v e d I n s t a n c e S t a t e = = n u l l ) {
g e t F r a g m e n t M a n a g e r ( ) . b e g i n T r a n s a c t i o n ( )
. a d d ( R . i d . c o n t a i n e r , D i r e c t o r y F r a g m e n t . n e w I n s t a n c e ( " / " ) )
. c o m m i t ( ) ;
}
}
}
10 . 21
L'activit principale
Rcep ondesno ca onsdesfragments:
p u b l i c c l a s s M a i n A c t i v i t y e x t e n d s A c t i v i t y
i m p l e m e n t s D i r e c t o r y F r a g m e n t . O n D i r e c t o r y F r a g m e n t L i s t e n e r {
@ O v e r r i d e
p u b l i c v o i d o n C h a n g e P a t h ( S t r i n g p a t h ) {
F i l e f i l e = n e w F i l e ( p a t h ) ;
F r a g m e n t f r a g m e n t =
( f i l e . i s D i r e c t o r y ( ) )
? D i r e c t o r y F r a g m e n t . n e w I n s t a n c e ( p a t h )
: F i l e F r a g m e n t . n e w I n s t a n c e ( p a t h ) ;
g e t F r a g m e n t M a n a g e r ( ) . b e g i n T r a n s a c t i o n ( )
. r e p l a c e ( R . i d . c o n t a i n e r , f r a g m e n t )
. a d d T o B a c k S t a c k ( p a t h )
. c o m m i t ( ) ;
}
10 . 22
Bases de donnes SQLite
Commentstockerdesinfosstructuresdansbasededonnes?
Pourcela,nousallons:
dnirunmodlededonnes(lestables);
reprsentercemodlesouslaformedeclasses;
dnirun SQL Helperpourfaciliterlacra ondestables;
voircommentmodier,consulterlesdonnes.
11 . 1
Dfinition du modle
Dni ondumodlededonnes,c'estdire,lestables:
p u b l i c c l a s s D a t a b a s e C o n t r a c t {
p u b l i c i n t e r f a c e A r t i c l e e x s t e n d s B a s e C o l u m n s {
S t r i n g t a b l e N a m e = " a rt i c l e s " ;
S t r i n g c o l u m n G u i d = " gu i d " ;
S t r i n g c o l u m n G u i d T y p e = " T E X T " ;
S t r i n g c o l u m n T i t l e = "
t i t l e " ;
S t r i n g c o l u m n T i t l e T y p e= " T E X T " ;
S t r i n g c o l u m n C o n t e n t = " c o n t e n t " ;
S t r i n g c o l u m n C o n t e n t T y p e = " T E X T " ;
}
}
11 . 2
Dfinition du SQLiteOpenHelper
Instruc onsSQLpar rdeladni ondumodle:
p u b l i c c l a s s D a t a b a s e O p e n H e l p e r e x t e n d s S Q L i t e O p e n H e l p e r {
p r i v a t e s t a t i c f i n a l S t r i n g S Q L C r e a t e T a b l e A r t i c l e s =
" C R E A T E T A B L E " + D a t a b a s e C o n t r a c t . A r t i c l e s. t a b l e N a m e + " ( " +
D a t a b a s e C o n t r a c t . A r t i c l e s . _ I D + " I N T E G E R P R I M A R Y K E Y , " +
D a t a b a s e C o n t r a c t . A r t i c l e s . c o l u m n G u i d + " " +
D a t a b a s e C o n t r a c t . A r t i c l e s . c o l u m n G u i d T y p e + " , " +
D a t a b a s e C o n t r a c t . A r t i c l e s . c o l u m n T i t l e + "
" +
D a t a b a s e C o n t r a c t . A r t i c l e s . c o l u m n T i t l e T y p e+ " , " +
D a t a b a s e C o n t r a c t . A r t i c l e s . c o l u m n C o n t e n t + " " +
D a t a b a s e C o n t r a c t . A r t i c l e s . c o l u m n C o n t e n t T y p e +
" ) " ;
p r i v a t e s t a t i c f i n a l S t r i n g S Q L D e l e t e T a b l e A r t i c l e s =
" D R O P T A B L E I F E X I S T S " ` D a t a b a s e C o n t r a c t . A r t i c l e s . t a b l e N a m e ;
}
11 . 3
Dfinition du SQLiteOpenHelp
Cra ondelabasededonnes:
p u b l i c c l a s s D a t a b a s e O p e n H e l p e r e x t e n d s S Q L i t e O p e n H e l p e r {
p u b l i c s t a t i c f i n a l i n t d a t a b a s e V e r s i o n = 1 ;
p u b l i c s t a t i c f i n a l S t r i n g d a t a b a s e N a m e = " a r t i c l e s . d b " ;
p u b l i c D a t a b a s e O p e n H e l p e r ( C o n t e x t c o n t e x t ) {
s u p e r ( c o n t e x t , d a t a b a s e N a m e , n u l l , d a t a b a s e V e r s i o n ) ;
}
@ O v e r r i d e
p u b l i c v o i d o n C r e a t e ( S Q L i t e D a t a b a s e d a t a b a s e ) {
d a t a b a s e . e x e c S Q L ( S Q L C r e a t e T a b l e A r t i c l e s ) ;
}
}
11 . 4
Dfinition du SQLiteOpenHelper
Misejourdelabasededonneslorsd'unchangementdeversion:
p u b l i c c l a s s D a t a b a s e O p e n H e l p e r e x t e n d s S Q L i t e O p e n H e l p e r {
p u b l i c s t a t i c f i n a l i n t d a t a b a s e V e r s i o n = 1 ;
@ O v e r r i d e
p u b l i c v o i d o n U p g r a d e ( S Q L i t e D a t a b a s e d a t a b a s e , i n t o l d V e r s i o n ,
i n t n e w V e r s i o n ) {
d a t a b a s e . e x e c S Q L ( S Q L D e l e t e T a b l e A r t i c l e s ) ;
o n C r e a t e ( d a t a b a s e ) ;
}
@ O v e r r i d e
p u b l i c v o i d o n D o w n g r a d e ( S Q L i t e D a t a b a s e d a t a b a s e , i n t o l d V e r s i o n ,
i n t n e w V e r s i o n ) {
o n U p g r a d e ( d a t a b a s e , o l d V e r s i o n , n e w V e r s i o n ) ;
}
}
11 . 5
Utilisation du SQLiteOpenHelper
Avantd'u liserleSQLiteOpenHelper,ilfautl'instancier:
d a t a b a s e O p e n H e l p e r = n e w D a t a b a s e O p e n H e l p e r ( c o n t e x t ) ;
11 . 6
Utilisation du SQLiteOpenHelper
Miseenjour( UPDATE):
p u b l i c v o i d u p d a t e ( A r t i c l e a r t i c l e ) {
S Q L i t e D a t a b a s e d a t a b a s e = d a t a b a s e O p e n H e l p e r . g e t W r i t a b l e D a t a b a s e ( ) ;
C o n t e n t V a l u e s v a l u e s = n e w C o n t e n t V a l u e s ( ) ;
v a l u e s . p u t ( D a t a b a s e C o n t r a c t . A r t i c l e s . c o l u m n C o n t e n t , a r t i c l e . c o n t e n t ) ;
v a l u e s . p u t ( D a t a b a s e C o n t r a c t . A r t i c l e s . c o l u m n T i t l e , a r t i c l e . t i t l e ) ;
S t r i n g s e l e c t i o n = D a t a b a s e C o n t r a c t . A r t i c l e s . c o l u m n G u i d ` " = ? " ;
S t r i n g [ ] s e l e c t i o n A r g s = { a r t i c l e . g u i d } ;
d a t a b a s e . u p d a t e ( D a t a b a s e C o n t r a c t . A r t i c l e s . t a b l e N a m e , v a l u e s ,
s e l e c t i o n , s e l e c t i o n A r g s ) ;
}
11 . 7
Utilisation du SQLiteOpenHelper
Suppression( DELETE):
p u b l i c v o i d d e l e t e ( S t r i n g g u i d ) {
S Q L i t e D a t a b a s e d a t a b a s e = d a t a b a s e O p e n H e l p e r . g e t W r i t a b l e D a t a b a s e ( ) ;
S t r i n g s e l e c t i o n = D a t a b a s e C o n t r a c t . A r t i c l e s . c o l u m n G u i d ` " = ? " ;
S t r i n g [ ] s e l e c t i o n A r g s = { g u i d } ;
d a t a b a s e . d e l e t e ( D a t a b a s e C o n t r a c t . A r t i c l e s . t a b l e N a m e ,
s e l e c t i o n ,
s e l e c t i o n A r g s ) ;
}
11 . 8
Utilisation du SQLiteOpenHelper
SELECT * FROM articles:
p u b l i c C u r s o r g e t A r t i c l e s ( ) {
S Q L i t e D a t a b a s e d a t a b a s e = d a t a b a s e O p e n H e l p e r . g e t R e a d a b l e D a t a b a s e ( ) ;
r e t u r n d a t a b a s e . q u e r y ( D a t a b a s e C o n t r a c t . A r t i c l e s . t a b l e N a m e ,
n u l l , n u l l , n e w S t r i n g [ ] { } , n u l l , n u l l , n u l l ) ;
}
11 . 9
Les curseurs
Lescurseursperme entdeparcourirlersultatd'unerequte:
int getCount();
boolean moveToFirst();
boolean moveToNext();
void close();
...
11 . 10
Exemple d'application
11 . 11
Les tables
Lastructuredelabasededonnes:
p u b l i c c l a s s D a t a b a s e C o n t r a c t {
p u b l i c i n t e r f a c e I t e m s e x t e n d s B a s e C o l u m n s {
S t r i n g t a b l e N a m e = " i t e m s " ;
S t r i n g c o l u m n T e x t = " t e x t " ;
S t r i n g c o l u m n T e x t T y p e = " T E X T " ;
}
11 . 12
Le code de l'activit principale
Ensupposantquenousavonscritle SQLiteOpenHelper:
p u b l i c c l a s s M a i n A c t i v i t y e x t e n d s A c t i v i t y {
p r i v a t e D a t a b a s e O p e n H e l p e r d a t a b a s e O p e n H e l p e r ;
p r i v a t e I t e m A d a p t e r a d a p t e r ;
p r i v a t e E d i t T e x t e d i t T e x t ;
@ O v e r r i d e
p r o t e c t e d v o i d o n C r e a t e ( B u n d l e s a v e d I n s t a n c e S t a t e ) {
s u p e r . o n C r e a t e ( s a v e d I n s t a n c e S t a t e ) ;
d a t a b a s e O p e n H e l p e r = n e w D a t a b a s e O p e n H e l p e r ( t h i s ) ;
s e t C o n t e n t V i e w ( R . l a y o u t . a c t i v i t y _ m a i n ) ;
r e c y c l e r V i e w = ( R e c y c l e r V i e w ) f i n d V i e w B y I d ( R . i d . r e c y c l e r V i e w ) ;
r e c y c l e r V i e w . s e t L a y o u t M a n a g e r ( n e w L i n e a r L a y o u t M a n a g e r ( t h i s ) ) ;
a d a p t e r = n e w I t e m A d a p t e r ( g e t I t e m s ( ) ) ;
r e c y c l e r V i e w . s e t A d a p t e r ( a d a p t e r ) ;
e d i t T e x t = ( E d i t T e x t ) f i n d V i e w B y I d ( R . i d . e d i t T e x t ) ;
}
}
11 . 13
Le code de l'activit principale
Lesmthodesquiinteragissentaveclabasededonnes:
p u b l i c c l a s s M a i n A c t i v i t y e x t e n d s A c t i v i t y {
p r i v a t e D a t a b a s e O p e n H e l p e r d a t a b a s e O p e n H e l p e r ;
p r i v a t e C u r s o r g e t I t e m s ( ) {
S Q L i t e D a t a b a s e d a t a b a s e =
d a t a b a s e O p e n H e l p e r . g e t R e a d a b l e D a t a b a s e ( ) ;
r e t u r n d a t a b a s e . q u e r y ( D a t a b a s e C o n t r a c t . I t e m s . t a b l e N a m e ,
n u l l , n u l l , n e w S t r i n g [ ] { } , n u l l , n u l l , n u l l ) ;
}
p r i v a t e v o i d i n s e r t I t e m ( S t r i n g t e x t ) {
S Q L i t e D a t a b a s e d a t a b a s e = d a t a b a s e O p e n H e l p e r . g e t W r i t a b l e D a t a b a s e ( ) ;
C o n t e n t V a l u e s v a l u e s = n e w C o n t e n t V a l u e s ( ) ;
v a l u e s . p u t ( D a t a b a s e C o n t r a c t . I t e m s . c o l u m n T e x t , t e x t ) ;
d a t a b a s e . i n s e r t ( D a t a b a s e C o n t r a c t . I t e m s . t a b l e N a m e , n u l l , v a l u e s ) ;
}
}
11 . 14
Le code de l'activit principale
Traitementdesclicssurlebouton"Ajouter":
p u b l i c c l a s s M a i n A c t i v i t y e x t e n d s A c t i v i t y {
p r i v a t e I t e m A d a p t e r a d a p t e r ;
p r i v a t e E d i t T e x t e d i t T e x t ;
p u b l i c v o i d o n A d d I t e m ( V i e w v i e w ) {
i n s e r t I t e m ( e d i t T e x t . g e t T e x t ( ) . t o S t r i n g ( ) ) ;
a d a p t e r . c h a n g e C u r s o r ( g e t I t e m s ( ) ) ;
e d i t T e x t . s e t T e x t ( " " ) ;
}
}
11 . 15
Le code de l'adaptateur
Cra ondesvues:
p u b l i c c l a s s I t e m A d a p t e r e x t e n d s R e c y c l e r V i e w . A d a p t e r < V i e w H o l d e r > {
p r i v a t e C u r s o r c u r s o r ;
p u b l i c I t e m A d a p t e r ( C u r s o r c u r s o r ) {
t h i s . c u r s o r = c u r s o r ;
}
@ O v e r r i d e
p u b l i c V i e w H o l d e r o n C r e a t e V i e w H o l d e r ( V i e w G r o u p p a r e n t , i n t v i e w T y p e ) {
V i e w v i e w = L a y o u t I n f l a t e r . f r o m ( p a r e n t . g e t C o n t e x t ( ) )
. i n f l a t e ( R . l a y o u t . i t e m , p a r e n t , f a l s e ) ;
V i e w H o l d e r v i e w H o l d e r = n e w V i e w H o l d e r ( v i e w ) ;
r e t u r n v i e w H o l d e r ;
}
11 . 16
Le code de l'adaptateur
Misejourdesvuesetnombred'lmentsdanslecurseur:
p u b l i c c l a s s I t e m A d a p t e r e x t e n d s R e c y c l e r V i e w . A d a p t e r < V i e w H o l d e r > {
p r i v a t e C u r s o r c u r s o r ;
@ O v e r r i d e
p u b l i c v o i d o n B i n d V i e w H o l d e r ( V i e w H o l d e r h o l d e r , i n t p o s i t i o n ) {
c u r s o r . m o v e T o P o s i t i o n ( p o s i t i o n ) ;
i n t i n d e x =
c u r s o r . g e t C o l u m n I n d e x ( D a t a b a s e C o n t r a c t . I t e m s . c o l u m n T e x t ) ;
S t r i n g t e x t = c u r s o r . g e t S t r i n g ( i n d e x ) ;
h o l d e r . b i n d ( t e x t ) ;
}
@ O v e r r i d e
p u b l i c i n t g e t I t e m C o u n t ( ) { r e t u r n c u r s o r . g e t C o u n t ( ) ; }
11 . 17
Le code de l'adaptateur
Changementdecurseur:
p u b l i c c l a s s I t e m A d a p t e r e x t e n d s R e c y c l e r V i e w . A d a p t e r < V i e w H o l d e r > {
p r i v a t e C u r s o r c u r s o r ;
p u b l i c v o i d c h a n g e C u r s o r ( C u r s o r c u r s o r ) {
t h i s . c u r s o r . c l o s e ( ) ;
t h i s . c u r s o r = c u r s o r ;
n o t i f y D a t a S e t C h a n g e d ( ) ;
}
11 . 18
Le code de ViewHolder
p u b l i c c l a s s V i e w H o l d e r e x t e n d s R e c y c l e r V i e w . V i e w H o l d e r {
p r i v a t e f i n a l T e x t V i e w t e x t V i e w ;
p u b l i c V i e w H o l d e r ( V i e w i t e m V i e w ) {
s u p e r ( i t e m V i e w ) ;
t e x t V i e w = ( T e x t V i e w ) i t e m V i e w . f i n d V i e w B y I d ( R . i d . t e x t ) ;
}
p u b l i c v o i d b i n d ( S t r i n g t e x t ) {
t e x t V i e w . s e t T e x t ( t e x t ) ;
}
}
11 . 19
Fournisseur de contenu
Unfournisseurdecontenuestuncomposantd'uneapplica on
Ilpermetl'accsdesdonnes
Ilprsentelesdonnessouslaformed'uneouplusieurstables
Chaquelignepossdeuniden ant
12 . 1
Fournisseur de contenu
Onaccdeunfournisseurdecontenuviaun ContentResolver
C o n t e n t R e s o l v e r c o n t e n t R e s o l v e r = c o n t e x t . g e t C o n t e n t R e s o l v e r ( ) ;
Ilpermetlesquatresopra onsdebase(CRUD):
Create: contentResolver.insert
Read: contentResolver.query
Update: contentResolver.update
Delete: contentResolver.delete
12 . 2
Content URIs
UnURI(UniformResourceIden er)iden eunedonne
Laclasse Urivanousperme redemanipulerdesURI
S t r i n g a u t h o r i t y = " c o m . u n i v _ a m u . c c i " ;
S t r i n g u s e r s = " u s e r s " ;
U r i c o n t e n t U r i = U r i . p a r s e ( " c o n t e n t : / / " + a u t h o r i t y + " / " + u s e r s ) ;
/ / - > c o n t e n t : / / c o m . u n i v _ a m u . c c i / u s e r s
U r i u s e r 2 U r i = C o n t e n t U r i s . w i t h A p p e n d e d I d ( c o n t e n t U r i , 2 ) ;
/ / - > c o n t e n t : / / c o m . u n i v _ a m u . c c i / u s e r s / 2
Pourfaireunerequte,ilfautunUri:
c u r s o r = c o n t e n t R e s o l v e r . q u e r y ( c o n t e n t U r i , / * . . . * / ) ;
c o n t e n t R e s o l v e r . i n s e r t ( c o n t e n t U r i , / * . . . * / ) ;
c o n t e n t R e s o l v e r . d e l e t e ( u s e r 2 U r i , / * . . . * / ) ;
12 . 3
Schma de la base de donnes
p u b l i c c l a s s C o n t r a c t {
p u b l i c s t a t i c f i n a l S t r i n g A U T H O R I T Y = " c o m . u n i v _ a m u . c c i " ;
p u b l i c s t a t i c f i n a l S t r i n g U S E R S = " u s e r s " ;
p u b l i c s t a t i c f i n a l U r i C O N T E N T _ U R I =
U r i . p a r s e ( " c o n t e n t : / / " + A U T H O R I T Y + " / " + U S E R S ) ;
p u b l i c i n t e r f a c e U s e r s e x t e n d s B a s e C o l u m n s {
S t r i n g F I R S T N A M E = " F I R S T N A M E " ;
S t r i n g L A S T N A M E = " L A S T N A M E " ;
}
}
12 . 4
Effectuer d'une requte
c u r s o r = c o n t e n t R e s o l v e r . q u e r y ( C o n t r a c t . C O N T E N T _ U R I ,
p r o j e c t i o n , s e l e c t i o n , s e l e c t i o n A r g s , s o r t O r d e r ) ;
Selec ondescolonnes
S t r i n g [ ] p r o j e c t i o n = { C o n t r a c t . U s e r s . _ I D ,
C o n t r a c t . U s e r s . F I R S T N A M E ,
C o n t r a c t . U s e r s . L A S T N A M E } ;
Ajoutd'uneclause"where"
S t r i n g s e l e c t i o n = C o n t r a c t . U s e r s . F I R S T N A M E + " = ? " ;
S t r i n g [ ] s e l e c t i o n A r g s = { " B o b " } ;
Ajoutd'un"orderby"
S t r i n g s o r t O r d e r = C o n t r a c t . U s e r s . L A S T N A M E + " A S C " ;
S e l e c t _ I D , F I R S T N A M E , L A S T N A M E
F R O M U S E R S W H E R E F I R S T N A M E = ' b o b ' O R D E R B Y L A S T N A M E A S C ;
12 . 5
Insrer des donnes
n e w U r i = c o n t e n t R e s o l v e r . i n s e r t ( C o n t r a c t . C O N T E N T _ U R I , v a l u e s ) ;
Lesvaleursajouer
C o n t e n t V a l u e s v a l u e s = n e w C o n t e n t V a l u e s ( ) ;
v a l u e s . p u t ( C o n t r a c t . U s e r s . F I R S T N A M E , " B o b " ) ;
v a l u e s . p u t ( C o n t r a c t . U s e r s . L A S T N A M E , " M a c h i n " ) ;
Uriretourn
c o n t e n t : / / c o m . u n i v _ a m u . c c i / u s e r s / [ i d e n t i f i a n t d e l a n o u v e l l e l i g n e ]
12 . 6
Modifier des donnes
r o w s U p d a t e d C o u n t = c o n t e n t R e s o l v e r . u p d a t e ( C o n t r a c t . C O N T E N T _ U R I ,
v a l u e s , s e l e c t i o n , s e l e c t i o n A r g s ) ;
Donnesme rejour
C o n t e n t V a l u e s v a l u e s = n e w C o n t e n t V a l u e s ( ) ;
v a l u e s . p u t ( C o n t r a c t . U s e r s . L A S T N A M E , " T r u c " ) ;
Ajoutd'uneclause"where"
S t r i n g s e l e c t i o n = C o n t r a c t . U s e r s . F I R S T N A M E + " = ? " ;
S t r i n g [ ] s e l e c t i o n A r g s = { " B o b " } ;
12 . 7
Supprimer des donnes
r o w s D e l e t e d C o u n t = c o n t e n t R e s o l v e r . d e l e t e ( C o n t r a c t . C O N T E N T _ U R I ,
s e l e c t i o n , s e l e c t i o n A r g s ) ;
Ajoutd'uneclause"where"
S t r i n g s e l e c t i o n = C o n t r a c t . U s e r s . F I R S T N A M E + " = ? " ;
S t r i n g [ ] s e l e c t i o n A r g s = { " B o b " } ;
D E L E T E F R O M U S E R S W H E R E F I R S T N A M E = " B o b " ;
12 . 8
Implmentation d'un fournisseur de contenu
p u b l i c c l a s s U s e r s P r o v i d e r e x t e n d s C o n t e n t P r o v i d e r {
@ O v e r r i d e
p u b l i c b o o l e a n o n C r e a t e ( ) { / * . . . * / }
@ O v e r r i d e
p u b l i c C u r s o r q u e r y ( U r i u r i ,
S t r i n g [ ] p r o j e c t i o n ,
S t r i n g s e l e c t i o n , S t r i n g [ ] s e l e c t i o n A r g s ,
S t r i n g s o r t O r d e r ) { / * . . . * / }
@ O v e r r i d e
p u b l i c C u r s o r i n s e r t ( U r i u r i , C o n t e n t V a l u e s v a l u e s ) { / * . . . * / }
@ O v e r r i d e
p u b l i c C u r s o r u p d a t e ( U r i u r i , C o n t e n t V a l u e s v a l u e s ,
S t r i n g s e l e c t i o n , S t r i n g [ ] s e l e c t i o n A r g s ) { / * . . . * / }
@ O v e r r i d e
p u b l i c C u r s o r d e l e t e ( U r i u r i ,
S t r i n g s e l e c t i o n , S t r i n g [ ] s e l e c t i o n A r g s ) { / * . . . * / }
@ O v e r r i d e
p u b l i c S t r i n g g e t T y p e ( U r i u r i ) { / * . . . * / }
}
12 . 9
Dclaration du fournisseur de contenu
Danslemanifestedel'applica on:
< m a n i f e s t . . . >
< a p p l i c a t i o n . . . >
. . .
< pr o v i d e r
a n d r o i d : a u t h o r i t i e s = " c o m . u n i v _ a m u . c c i "
a n d r o i d : n a m e = " . U s e r s P r o v i d e r "
a n d r o i d : e x p o r t e d = " t r u e " / >
< a p p l i c a t i o n >
< / m a n i f e s t >
12 . 10
DatabaseHelper pour SQLite
p u b l i c c l a s s U s e r D a t a b a s e H e l p e r e x t e n d s S Q L i t e O p e n H e l p e r {
p r i v a t e s t a t i c f i n a l i n t D A T A B A S E _ V E R S I O N = 1 ;
p u b l i c s t a t i c f i n a l S t r i n g D A T A B A S E _ N A M E = " u s e r s . d b " ;
p u b l i c U s e r D a t a b a s e H e l p e r ( C o n t e x t c o n t e x t ) {
s u p e r ( c o n t e x t , D A T A B A S E _ N A M E , n u l l , D A T A B A S E _ V E R S I O N ) ;
}
@ O v e r r i d e
p u b l i c v o i d o n C r e a t e ( S Q L i t e D a t a b a s e d b ) { c r e a t e T a b l e ( d b ) ; }
@ O v e r r i d e
p u b l i c v o i d o n U p g r a d e ( S Q L i t e D a t a b a s e d b , i n t o l d V e r s i o n , i n t n e w V e r s i o n ) {
d r o p T a b l e ( d b ) ; o n C r e a t e ( d b ) ;
}
@ O v e r r i d e
p u b l i c v o i d o n D o w n g r a d e ( S Q L i t e D a t a b a s e d b , i n t o l d V e r s i o n , i n t n e w V e r s i o n ) {
o n U p g r a d e ( d b , o l d V e r s i o n , n e w V e r s i o n ) ;
}
p r i v a t e s t a t i c v o i d c r e a t e T a b l e ( S Q L i t e D a t a b a s e d b ) { / * . . * / }
p r i v a t e s t a t i c v o i d d r o p T a b l e ( S Q L i t e D a t a b a s e d b ) { / * . . . * / }
}
12 . 11
Utilisation du DatabaseHelper
p u b l i c c l a s s U s e r s P r o v i d e r e x t e n d s C o n t e n t P r o v i d e r {
p r i v a t e U s e r D a t a b a s e H e l p e r o p e n H e l p e r ;
@ O v e r r i d e
p u b l i c b o o l e a n o n C r e a t e ( ) {
o p e n H e l p e r = n e w U s e r D a t a b a s e H e l p e r ( g e t C o n t e x t ( ) ) ;
}
@ O v e r r i d e
p u b l i c C u r s o r q u e r y ( U r i u r i ,
S t r i n g [ ] p r o j e c t i o n ,
S t r i n g s e l e c t i o n , S t r i n g [ ] s e l e c t i o n A r g s ,
S t r i n g s o r t O r d e r ) {
S Q L i t e D a t a b a s e d a t a b a s e = o p e n H e l p e r . g e t R e a d a b l e D a t a b a s e ( ) ; / * . . . * /
}
@ O v e r r i d e
p u b l i c C u r s o r u p d a t e ( U r i u r i , C o n t e n t V a l u e s v a l u e s ,
S t r i n g s e l e c t i o n , S t r i n g [ ] s e l e c t i o n A r g s ) {
S Q L i t e D a t a b a s e d a t a b a s e = o p e n H e l p e r . g e t W r i t a b l e D a t a b a s e ( ) ; / * . . . * /
}
/ * . . . * /
}
12 . 12
Dtection du type d'URI
p u b l i c c l a s s U s e r s P r o v i d e r e x t e n d s C o n t e n t P r o v i d e r {
p r i v a t e s t a t i c f i n a l i n t U S E R S = 1 ;
p r i v a t e s t a t i c f i n a l i n t U S E R S _ I D = 2 ;
p r i v a t e s t a t i c f i n a l U r i M a t c h e r u r i M a t c h e r =
n e w U r i M a t c h e r ( U r i M a t c h e r . N O _ M A T C H ) ;
s t a t i c {
u r i M a t c h e r . a d d U R I ( C o n t r a c t . A U T H O R I T Y , C o n t r a c t . U S E R S , U S E R S ) ;
u r i M a t c h e r . a d d U R I ( C o n t r a c t . A U T H O R I T Y , C o n t r a c t . U S E R S + " / # " , U S E R S _ I D ) ;
}
@ O v e r r i d e
p u b l i c C u r s o r q u e r y ( U r i u r i , S t r i n g [ ] p r o j e c t i o n ,
S t r i n g s e l e c t i o n , S t r i n g [ ] s e l e c t i o n A r g s ,
S t r i n g s o r t O r d e r ) {
s w i t c h ( u r i M a t c h e r . m a t c h ( u r i ) ) {
c a s e A L A R M S : / * . . . * / b r e a k ;
c a s e A L A R M S _ I D :
S t r i n g i d = u r i . g e t L a s t P a t h S e g m e n t ( ) ;
/ * . . . * / b r e a k ;
d e f a u l t : t h r o w n e w I l l e g a l A r g u m e n t E x c e p t i o n ( " U n k n o w n U R I " + u r i ) ;
} / * . . . * /
}
12 . 13
Type MIME (Multipurpose Internet Mail Extensions)
p u b l i c c l a s s U s e r s P r o v i d e r e x t e n d s C o n t e n t P r o v i d e r {
/ * . . . * /
@ O v e r r i d e
p u b l i c S t r i n g g e t T y p e ( U r i u r i ) {
s w i t c h ( u r i M a t c h e r . m a t c h ( u r i ) ) {
c a s e U S E R S :
r e t u r n " v n d . a n d r o i d . c u r s o r . d i r / v n d . c o m . u n i v _ a m u . c c i . u s e r s " ;
c a s e U S E R S _ I D :
r e t u r n " v n d . a n d r o i d . c u r s o r . i t e m / v n d . c o m . u n i v _ a m u . c c i . u s e r s " ;
d e f a u l t :
t h r o w n e w I l l e g a l A r g u m e n t E x c e p t i o n ( " U n k n o w n U R I " + u r i ) ;
}
}
}
Descrip ondutypedesdonnesretournesparunURI
Format: vnd.android.cursor.[dir|item]/vnd.<name>.<type>
12 . 14
Adaptateur utilisant un fournisseur de contenu
p u b l i c c l a s s U s e r s A d a p t e r e x t e n d s R e c y c l e r V i e w . A d a p t e r < U s e r V i e w H o l d e r > {
p r i v a t e C u r s o r c u r s o r ;
@ O v e r r i d e
p u b l i c v o i d o n B i n d V i e w H o l d e r ( U s e r V i e w H o l d e r v i e w H o l d e r , i n t p o s i t i o n ) {
i f ( ! c u r s o r . m o v e T o P o s i t i o n ( p o s i t i o n ) ) { r e t u r n ; }
v i e w H o l d e r . b i n d ( c u r s o r ) ;
}
@ O v e r r i d e
p u b l i c i n t g e t I t e m C o u n t ( ) {
r e t u r n c u r s o r = = n u l l ? 0 : c u r s o r . g e t C o u n t ( ) ;
}
p u b l i c v o i d s w a p C u r s o r ( C u r s o r c u r s o r ) {
i f ( t h i s . c u r s o r = = c u r s o r ) { r e t u r n ; }
i f ( t h i s . c u r s o r ! = n u l l ) { t h i s . c u r s o r . c l o s e ( ) ; }
t h i s . c u r s o r = c u r s o r ;
n o t i f y D a t a S e t C h a n g e d ( ) ;
}
/ * . . . * /
}
12 . 15
Chargement des curseurs
p u b l i c c l a s s U s e r F r a g m e n t e x t e n d s F r a g m e n t {
p r i v a t e U s e r s A d a p t e r a d a p t e r ;
@ O v e r r i d e
p u b l i c v o i d o n C r e a t e ( B u n d l e s a v e d I n s t a n c e S t a t e ) {
s u p e r . o n C r e a t e ( s a v e d I n s t a n c e S t a t e ) ;
g e t L o a d e r M a n a g e r ( ) . i n i t L o a d e r ( 0 , n u l l , n e w L o a d e r C a l l b a c k s ( ) ) ;
}
@ O v e r r i d e
p u b l i c V i e w o n C r e a t e V i e w ( L a y o u t I n f l a t e r i n f l a t e r , V i e w G r o u p c o n t a i n e r ,
B u n d l e s a v e d I n s t a n c e S t a t e ) {
a d a p t e r = n e w U s e r s A d a p t e r ( ) ;
/ * . . . * /
}
p r i v a t e c l a s s L o a d e r C a l l b a c k s
i m p l e m e n t s L o a d e r M a n a g e r . L o a d e r C a l l b a c k s < C u r s o r > {
/ * . . . * /
}
12 . 16
Chargement des curseurs
p u b l i c c l a s s U s e r F r a g m e n t e x t e n d s F r a g m e n t {
p r i v a t e U s e r s A d a p t e r a d a p t e r ;
/ * . . . * /
p r i v a t e c l a s s L o a d e r C a l l b a c k s
i m p l e m e n t s L o a d e r M a n a g e r . L o a d e r C a l l b a c k s < C u r s o r > {
@ O v e r r i d e
p u b l i c L o a d e r o n C r e a t e L o a d e r ( i n t i d , B u n d l e a r g s ) {
r e t u r n n e w C u r s o r L o a d e r ( g e t A c t i v i t y ( ) , C o n t r a c t . C O N T E N T _ U R I ,
n u l l , n u l l , n u l l , n u l l ) ;
}
@ O v e r r i d e
p u b l i c v o i d o n L o a d F i n i s h e d ( L o a d e r l o a d e r , C u r s o r d a t a ) {
a d a p t e r . s w a p C u r s o r ( d a t a ) ;
}
@ O v e r r i d e
p u b l i c v o i d o n L o a d e r R e s e t ( L o a d e r l o a d e r ) { a d a p t e r . s w a p C u r s o r ( n u l l ) ; }
}
12 . 17
Notification des modifications
p u b l i c c l a s s U s e r s P r o v i d e r e x t e n d s C o n t e n t P r o v i d e r {
@ O v e r r i d e
p u b l i c C u r s o r q u e r y ( U r i u r i , S t r i n g [ ] p r o j e c t i o n ,
S t r i n g s e l e c t i o n , S t r i n g [ ] s e l e c t i o n A r g s ,
S t r i n g s o r t O r d e r ) {
C u r s o r c u r s o r = / * . . . . * /
c u r s o r . s e t N o t i f i c a t i o n U r i ( g e t C o n t e x t ( ) . g e t C o n t e n t R e s o l v e r ( ) , u r i ) ;
r e t u r n c u r s o r ;
}
@ O v e r r i d e
p u b l i c C u r s o r u p d a t e ( U r i u r i , C o n t e n t V a l u e s v a l u e s ,
S t r i n g s e l e c t i o n , S t r i n g [ ] s e l e c t i o n A r g s ) {
g e t C o n t e x t ( ) . g e t C o n t e n t R e s o l v e r ( ) . n o t i f y C h a n g e ( u r i , n u l l ) ;
}
/ * . . . * /
Lecurseurseraredemandchaquemodica on
12 . 18
Animation dans les RecyclerView
p u b l i c c l a s s U s e r s A d a p t e r e x t e n d s R e c y c l e r V i e w . A d a p t e r < U s e r V i e w H o l d e r > {
p r i v a t e C u r s o r c u r s o r ;
p u b l i c U s e r s A d a p t e r ( ) { s e t H a s S t a b l e I d s ( t r u e ) ; }
@ O v e r r i d e
p u b l i c l o n g g e t I t e m I d ( i n t p o s i t i o n ) {
i f ( c u r s o r = = n u l l | | ! c u r s o r . m o v e T o P o s i t i o n ( p o s i t i o n ) ) {
r e t u r n R e c y c l e r V i e w . N O _ I D ;
}
r e t u r n c u r s o r . g e t L o n g ( c u r s o r . g e t C o l u m n I n d e x ( C o n t r a c t . U s e r s . _ I D ) ) ;
}
/ * . . . * /
}
LesRecyclerViewpeuventanimerlamodica ondelaliste:
Lesiden antsdoiventtrestables
Ilfautimplmenterlamthode getItemId
12 . 19
Services
Unserviceestuncomposant
Ilnefournitpasd'interfaceu lisateur
Ilpeutexcuterdestchesdefond
Unservicepeuttredmarrparuneautreapplica on
Uncomposantpeuts'a acher(bind)unservice
Celaluipermetdecommuniqueravecleservice
Entreapplica ons,communica onsinterprocessus(IPC)
13 . 1
Les deux types de service
"Started"
Leserviceestdmarrenu lisant startService:
I n t e n t i n t e n t = n e w I n t e n t ( c o n t e x t , D o w n l o a d S e r v i c e . c l a s s ) ;
i n t e n t . s e t D a t a ( U r i . p a r s e ( u r l ) ) ;
c o n t e x t . s t a r t S e r v i c e ( d o w n l o a d I n t e n t ) ;
"Bound"
Leserviceesta achaucomposantenu lisant bindService:
I n t e n t i n t e n t = n e w I n t e n t ( t h i s , L o c a l S e r v i c e . c l a s s ) ;
c o n n e c t i o n = n e w S e r v i c e C o n n e c t i o n ( ) {
@ O v e r r i d e
p u b l i c v o i d o n S e r v i c e C o n n e c t e d ( C o m p o n e n t N a m e n a m e , I B i n d e r s e r v i c e ) { . . . }
@ O v e r r i d e
p u b l i c v o i d o n S e r v i c e D i s c o n n e c t e d ( C o m p o n e n t N a m e n a m e ) { . . . }
} ;
c o n t e x t . b i n d S e r v i c e ( i n t e n t , c o n n e c t i o n , C o n t e x t . B I N D _ A U T O _ C R E A T E ) ;
13 . 2
Cration d'un service
p u b l i c c l a s s M y S e r v i c e e x t e n d s S e r v i c e {
@ O v e r r i d e
p u b l i c v o i d o n C r e a t e ( ) { . . . }
@ O v e r r i d e
p u b l i c i n t o n S t a r t C o m m a n d ( I n t e n t i n t e n t , i n t f l a g s , i n t s t a r t I d ) {
/ / P o u r r e d m a r r e r a u t o m a t i q u e m e n t s i l e s e r v i c e e s t t u :
r e t u r n S T A R T _ S T I C K Y ;
}
@ O v e r r i d e
p u b l i c I B i n d e r o n B i n d ( I n t e n t i n t e n t ) { . . . }
@ O v e r r i d e
p u b l i c b o o l e a n o n U n b i n d ( I n t e n t i n t e n t ) { . . . }
@ O v e r r i d e
p u b l i c v o i d o n R e b i n d ( I n t e n t i n t e n t ) { . . . }
@ O v e r r i d e
p u b l i c b o o l e a n s t o p S e r v i c e ( I n t e n t i n t e n t ) {
. . .
r e t u r n s u p e r . s t o p S e r v i c e ( i n t e n t ) ;
}
@ O v e r r i d e
p u b l i c v o i d o n D e s t r o y ( ) { . . . } 13 . 3
}
< m a n i f e s t . . . >
< a p p l i c a t i o n . . . >
. . .
< s e r v i c e a n d r o i d : n a m e = " . M y S e r v i c e " a n d r o i d : e x p o r t e d = " f a l s e " / >
< / a p p l i c a t i o n >
< / m a n i f e s t >
13 . 4
Cycle de vie d'un service
WorkcreatedandsharedbytheAndroidOpenSourceProjectandusedaccordingtotermsdescribedintheCrea veCommons2.5A ribu onLicense
13 . 5
Arrt d'un service "started"
Lesystmepeutarrterleservices'ilabesoindemmoire
Lesystmepeuts'arrterluimmeenu lisant stopSelf()
Uncomposantpeutdemanderl'arrtduservice:
I n t e n t i n t e n t = n e w I n t e n t ( c o n t e x t , M y S e r v i c e . c l a s s ) ;
c o n t e x t . s t o p S e r v i c e ( i n t e n t ) ;
stopService(Intent intent)duserviceestalorsappele
Ilestimportantdenepasarrterunservicequitravaille
Les startIdde onStartCommandpeuventtreconservs:
p u b l i c i n t o n S t a r t C o m m a n d ( I n t e n t i n t e n t , i n t f l a g s , i n t s t a r t I d )
p u b l i c c l a s s L o c a l S e r v i c e e x t e n d s S e r v i c e {
p r i v a t e f i n a l I B i n d e r b i n d e r = n e w L o c a l B i n d e r ( ) ;
p r i v a t e f i n a l R a n d o m g e n e r a t o r = n e w R a n d o m ( ) ;
p u b l i c c l a s s L o c a l B i n d e r e x t e n d s B i n d e r {
L o c a l S e r v i c e g e t S e r v i c e ( ) {
r e t u r n L o c a l S e r v i c e . t h i s ;
}
}
@ O v e r r i d e
p u b l i c I B i n d e r o n B i n d ( I n t e n t i n t e n t ) {
r e t u r n b i n d e r ;
}
p u b l i c i n t g e t R a n d o m N u m b e r ( ) {
r e t u r n g e n e r a t o r . n e x t I n t ( 1 0 0 ) ;
}
}
13 . 7
Connexion un service de la mme application
p u b l i c c l a s s M y A c t i v i t y e x t e n d s A c t i v i t y {
L o c a l S e r v i c e s e r v i c e ;
b o o l e a n b o u n d = f a l s e ;
@ O v e r r i d e
p r o t e c t e d v o i d o n S t a r t ( ) {
s u p e r . o n S t a r t ( ) ;
I n t e n t i n t e n t = n e w I n t e n t ( t h i s , L o c a l S e r v i c e . c l a s s ) ;
b i n d S e r v i c e ( i n t e n t , c o n n e c t i o n , C o n t e x t . B I N D _ A U T O _ C R E A T E ) ;
}
@ O v e r r i d e
p r o t e c t e d v o i d o n S t o p ( ) {
s u p e r . o n S t o p ( ) ;
i f ( b o u n d ) { u n b i n d S e r v i c e ( c o n n e c t i o n ) ; b o u n d = f a l s e ; }
}
/ * . . . * /
}
13 . 8
Connexion un service de la mme application
p u b l i c c l a s s M y A c t i v i t y e x t e n d s A c t i v i t y {
L o c a l S e r v i c e s e r v i c e ;
b o o l e a n b o u n d = f a l s e ;
/ * . . . * /
p r i v a t e S e r v i c e C o n n e c t i o n c o n n e c t i o n = n e w S e r v i c e C o n n e c t i o n ( ) {
@ O v e r r i d e
p u b l i c v o i d o n S e r v i c e C o n n e c t e d ( C o m p o n e n t N a m e c l a s s N a m e ,
I B i n d e r i B i n d e r ) {
L o c a l S e r v i c e . L o c a l B i n d e r b i n d e r =
( L o c a l S e r v i c e . L o c a l B i n d e r ) i B i n d e r ;
M y A c t i v i t y . t h i s . s e r v i c e = b i n d e r . g e t S e r v i c e ( ) ;
b o u n d = t r u e ;
}
@ O v e r r i d e
p u b l i c v o i d o n S e r v i c e D i s c o n n e c t e d ( C o m p o n e n t N a m e c l a s s N a m e ) {
b o u n d = f a l s e ;
}
} ;
}
13 . 9
Utilisation du service
p u b l i c c l a s s M y A c t i v i t y e x t e n d s A c t i v i t y {
L o c a l S e r v i c e s e r v i c e ;
b o o l e a n b o u n d = f a l s e ;
/ * . . . * /
p u b l i c i n t g e t N u m b e r F r o m S e r v i c e ( ) {
r e t u r n ( b o u n d ) ? s e r v i c e . g e t R a n d o m N u m b e r ( ) : 0 ;
}
/ * . . . * /
}
13 . 10
Cration d'un service "bound" accessible d'une autre application
p u b l i c c l a s s M e s s e n g e r S e r v i c e e x t e n d s S e r v i c e {
p r i v a t e f i n a l R a n d o m g e n e r a t o r = n e w R a n d o m ( ) ;
c l a s s I n c o m i n g H a n d l e r e x t e n d s H a n d l e r {
@ O v e r r i d e
p u b l i c v o i d h a n d l e M e s s a g e ( M e s s a g e m s g ) {
i n t n u m b e r = g e n e r a t o r . n e x t I n t ( m s g . a r g 2 - m s g . a r g 1 + 1 ) + m s g . a r g 1 ;
/ * T O D O : e n v o y e r l a r p o n s e * /
}
}
f i n a l M e s s e n g e r m e s s e n g e r = n e w M e s s e n g e r ( n e w I n c o m i n g H a n d l e r ( ) ) ;
@ O v e r r i d e
p u b l i c I B i n d e r o n B i n d ( I n t e n t i n t e n t ) {
r e t u r n m e s s e n g e r . g e t B i n d e r ( ) ;
}
}
13 . 11
Connexion au service
p u b l i c c l a s s M y A c t i v i t y e x t e n d s A c t i v i t y {
M e s s e n g e r s e r v i c e ;
b o o l e a n b o u n d = f a l s e ;
@ O v e r r i d e
p r o t e c t e d v o i d o n S t a r t ( ) {
s u p e r . o n S t a r t ( ) ;
I n t e n t i n t e n t = n e w I n t e n t ( t h i s , M e s s e n g e r S e r v i c e . c l a s s ) ;
b i n d S e r v i c e ( i n t e n t , c o n n e c t i o n , C o n t e x t . B I N D _ A U T O _ C R E A T E ) ;
}
@ O v e r r i d e
p r o t e c t e d v o i d o n S t o p ( ) {
s u p e r . o n S t o p ( ) ;
i f ( b o u n d ) { u n b i n d S e r v i c e ( c o n n e c t i o n ) ; b o u n d = f a l s e ; }
}
/ * . . . * /
}
13 . 12
Connexion au service
p u b l i c c l a s s M y A c t i v i t y e x t e n d s A c t i v i t y {
M e s s e n g e r s e r v i c e ;
b o o l e a n b o u n d = f a l s e ;
/ * . . . * /
p r i v a t e S e r v i c e C o n n e c t i o n c o n n e c t i o n = n e w S e r v i c e C o n n e c t i o n ( ) {
@ O v e r r i d e
p u b l i c v o i d o n S e r v i c e C o n n e c t e d ( C o m p o n e n t N a m e c l a s s N a m e ,
I B i n d e r i B i n d e r ) {
M y A c t i v i t y . t h i s . s e r v i c e = n e w M e s s e n g e r ( i B i n d e r ) ;
b o u n d = t r u e ;
}
@ O v e r r i d e
p u b l i c v o i d o n S e r v i c e D i s c o n n e c t e d ( C o m p o n e n t N a m e c l a s s N a m e ) {
b o u n d = f a l s e ;
}
} ;
}
13 . 13
Communication avec le service
p u b l i c c l a s s M y A c t i v i t y e x t e n d s A c t i v i t y {
M e s s e n g e r s e r v i c e ;
b o o l e a n b o u n d = f a l s e ;
/ * . . . * /
p u b l i c v o i d g e t N u m b e r F r o m S e r v i c e ( ) {
i f ( b o u n d ) {
M e s s a g e m s g = M e s s a g e . o b t a i n ( n u l l , 0 , 2 0 , 1 0 0 ) ;
t r y { s e r v i c e . s e n d ( m s g ) ; }
c a t c h ( R e m o t e E x c e p t i o n e ) { e . p r i n t S t a c k T r a c e ( ) ; }
}
}
/ * . . . * /
}
p u b l i c c l a s s M e s s e n g e r S e r v i c e e x t e n d s S e r v i c e {
c l a s s I n c o m i n g H a n d l e r e x t e n d s H a n d l e r {
@ O v e r r i d e
p u b l i c v o i d h a n d l e M e s s a g e ( M e s s a g e m s g ) {
i n t n u m b e r = g e n e r a t o r . n e x t I n t ( m s g . a r g 2 - m s g . a r g 1 + 1 ) + m s g . a r g 1 ;
/ * T O D O : e n v o y e r l a r p o n s e * /
}
}
}
13 . 14
Ajout d'un replyTo pour recevoir la rponse
p u b l i c c l a s s M y A c t i v i t y e x t e n d s A c t i v i t y {
M e s s e n g e r s e r v i c e ;
b o o l e a n b o u n d = f a l s e ;
/ * . . . * /
p u b l i c v o i d g e t N u m b e r F r o m S e r v i c e ( ) {
i f ( b o u n d ) {
M e s s a g e m s g = M e s s a g e . o b t a i n ( n u l l , 0 , 2 0 , 1 0 0 ) ;
t r y { m s g . r e p l y T o = m e s s e n g e r ; s e r v i c e . s e n d ( m s g ) ; }
c a t c h ( R e m o t e E x c e p t i o n e ) { e . p r i n t S t a c k T r a c e ( ) ; }
}
}
c l a s s R e s u l t H a n d l e r e x t e n d s H a n d l e r {
@ O v e r r i d e
p u b l i c v o i d h a n d l e M e s s a g e ( M e s s a g e m s g ) {
L o g . d ( " M y A c t i v i t y " , " R e s u l t : " + m s g . a r g 1 ) ;
}
}
f i n a l M e s s e n g e r m e s s e n g e r = n e w M e s s e n g e r ( n e w R e s u l t H a n d l e r ( ) ) ;
}
13 . 15
Communication de la rponse par le service
p u b l i c c l a s s M e s s e n g e r S e r v i c e e x t e n d s S e r v i c e {
p r i v a t e f i n a l R a n d o m g e n e r a t o r = n e w R a n d o m ( ) ;
c l a s s I n c o m i n g H a n d l e r e x t e n d s H a n d l e r {
@ O v e r r i d e
p u b l i c v o i d h a n d l e M e s s a g e ( M e s s a g e m s g ) {
i n t n u m b e r = g e n e r a t o r . n e x t I n t ( m s g . a r g 2 - m s g . a r g 1 + 1 ) + m s g . a r g 1 ;
M e s s a g e r e s u l t M e s s a g e = M e s s a g e . o b t a i n ( n u l l , 0 , n u m b e r , 0 ) ;
t r y {
m s g . r e p l y T o . s e n d ( r e s u l t M e s s a g e ) ;
} c a t c h ( R e m o t e E x c e p t i o n e ) {
e . p r i n t S t a c k T r a c e ( ) ;
}
}
}
/ * . . . * /
}
13 . 16
Service en premier plan
13 . 17
Service en premier plan
Passageenpremierplan:
N o t i f i c a t i o n n o t i f i c a t i o n = n e w N o t i f i c a t i o n . B u i l d e r ( t h i s )
. s e t C o n t e n t T i t l e ( " M y n o t i f i c a t i o n " )
. s e t C o n t e n t T e x t ( " C o n t e n t t e x t " )
. s e t S m a l l I c o n ( R . d r a w a b l e . i c o n )
. b u i l d ( ) ;
I n t e n t n o t i f i c a t i o n I n t e n t = n e w I n t e n t ( t h i s , M y A c t i v i t y . c l a s s ) ;
P e n d i n g I n t e n t p e n d i n g I n t e n t =
P e n d i n g I n t e n t . g e t A c t i v i t y ( t h i s , 0 , n o t i f i c a t i o n I n t e n t , 0 ) ;
s t a r t F o r e g r o u n d ( N O T I F I C A T I O N _ I D , n o t i f i c a t i o n ) ;
Sor edupremierplan:
s t o p F o r e g r o u n d ( t r u e / * p o u r s u p p r i m e r l a n o t i f i c a t i o n * / ) ;
13 . 18
Cycle de vie des processus
Androidclasselesprocessusparordred'importance:
1.Foregroundprocess
Ac vitencoursd'u lisa onparl'u lisateur
Serviceconnectuneac vitencoursd'u lisa on
Servicequiaappel startForeground()
Servicequiexcuteunedesescallbacks
BroadcastReceiverquiexcute onReceive
2.Visibleprocess
Ac vitvisible
Serviceconnectuneac vitvisible
13 . 19
Cycle de vie des processus
3.Serviceprocess
Servicequiatdmarravec startService
4.Backgroundprocess
Con entdescomposants
5.Emptyprocess
Necon entrien
13 . 20
Les threads
Lesthreadssontdesprocessuslgeroulsd'excu on
Lesthreadss'excutent(ousemblents'excuter)enparallle
Lesthreadsd'unmmeprocessuspartagentunezonemmoire
SousAndroid,uneapplica onn'u lisequ'unthreadprincipal
Seullethreadprincipalpeutmodierlesvuesdel'interface
Lethreadprincipalgrelaqueued'vnements
14 . 1
Un exemple
Client Server
MainThread
drawUI
DownloadThread
onClick
Connection
...
Download
...
NotifyUI
UpdateView
drawUI
...
14 . 2
L'interface Runnable et la classe Thread
L'interface Runnable:
p u b l i c i n t e r f a c e R u n n a b l e { v o i d r u n ( ) ; }
Dni ond'unetcheexcuter:
p u b l i c c l a s s D o w n l o a d T a s k i m p l e m e n t s R u n n a b l e {
p u b l i c v o i d r u n ( ) { / * T O D O D o w n l o a d * / }
}
Cra ond'unnouveauthread:
T h r e a d t h r e a d = n e w T h r e a d ( n e w D o w n l o a d T a s k ( ) ) ;
Excu onduthread:
t h r e a d . s t a r t ( ) ;
14 . 3
Synchronisation avec le thread principal
Seullethreadprincipalpeutmodierlesvuesdel'interface:
p u b l i c c l a s s D o w n l o a d T a s k i m p l e m e n t s R u n n a b l e {
p r i v a t e f i n a l I m a g e V i e w i m a g e V i e w ;
p u b l i c D o w n l o a d T a s k ( I m a g e V i e w i m a g e V i e w ) {
t h i s . i m a g e V i e w = i m a g e V i e w ;
}
p u b l i c v o i d r u n ( ) {
B i t m a p b i t m a p = l o a d I m a g e ( " h t t p : / / e x a m p l e . c o m / a . j p g " ) ;
/ * I N T E R D I T : i m a g e V i e w . s e t I m a g e B i t m a p ( b i t m a p ) ; * /
}
}
14 . 4
Synchronisation avec le thread principal
Rintgra ondanslethreadprincipal:
p u b l i c v o i d r u n ( ) {
B i t m a p b i t m a p = l o a d I m a g e ( " h t t p : / / e x a m p l e . c o m / a . j p g " ) ;
i m a g e V i e w . p o s t ( n e w R u n n a b l e ( ) {
p u b l i c v o i d r u n ( ) { i m a g e V i e w . s e t I m a g e B i t m a p ( b i t m a p ) ; }
} ) ;
}
Pourexcuterdestchesdanslethreadprincipal:
Activity.runOnUiThread(Runnable)
View.post(Runnable)
View.postDelayed(Runnable, long)
14 . 5
La classe AsyncTask
p u b l i c I m a g e D o w n l o a d e r ( I m a g e V i e w i m a g e V i e w ) { t h i s . v i e w = i m a g e V i e w ; }
@ O v e r r i d e
p r o t e c t e d B i t m a p d o I n B a c k g r o u n d ( U R L . . . u r l s ) {
r e t u r n d o w n l o a d I m a g e ( u r l s [ 0 ] ) ;
}
@ O v e r r i d e
p r o t e c t e d v o i d o n P o s t E x e c u t e ( B i t m a p b i t m a p ) {
v i e w . s e t I m a g e B i t m a p ( b i t m a p ) ;
}
}
14 . 6
La classe AsyncTask
Lesautresmthodesde AsyncTask:
void onPreExecute()
void onProgressUpdate(Progress... values)
void publishProgress(Progress... values)
void onCancelled(Result result)
boolean cancel(boolean mayInterruptIfRunning)
boolean isCancelled()
14 . 7
Exemple - Connexion rseau
14 . 8
Exemple - Connexion rseau
Nousdevons:
Ajouterunepermissionl'applica on
Crerunthread
Ouvriruneconnexion
Lirelesdonnesprovenantd'unux
Injecterlesdonnestlchargesdansl'applica on
14 . 9
Exemple - Connexion rseau
Ajoutdesdroitsdanslemanifestedel'applica on:
< m a n i f e s t
x m l n s : a n d r o i d = " . . . . "
p a c k a g e = " c o m . u n i v _ a m u . c c i . i m a g e d o w n l o a d e r " >
< u s e s - p e r m i s s i o n
a n d r o i d : n a m e = " a n d r o i d . p e r m i s s i o n . I N T E R N E T " / >
< ! - - . . . . - - >
< / m a n i f e s t >
14 . 10
Exemple - Connexion rseau
Cra ondelatcheperme antletlchargementdel'image:
p u b l i c c l a s s I m a g e D o w n l o a d e r e x t e n d s A s y n c T a s k < U R L , I n t e g e r , B i t m a p > {
p r i v a t e I m a g e V i e w i m a g e V i e w ;
p u b l i c I m a g e D o w n l o a d e r ( I m a g e V i e w i m a g e V i e w ) {
t h i s . i m a g e V i e w = i m a g e V i e w ;
}
@ O v e r r i d e
p r o t e c t e d B i t m a p d o I n B a c k g r o u n d ( U R L . . . u r l s ) {
U R L u r l = u r l s [ 0 ] ;
t r y ( I n p u t S t r e a m s t r e a m = u r l . o p e n C o n n e c t i o n ( ) . g e t I n p u t S t r e a m ( ) ) {
B i t m a p b i t m a p = B i t m a p F a c t o r y . d e c o d e S t r e a m ( s t r e a m ) ;
r e t u r n b i t m a p ;
} c a t c h ( I O E x c e p t i o n e ) { r e t u r n n u l l ; }
}
/ * . . . * /
14 . 11
Exemple - Connexion rseau
Cra ondelatcheperme antletlchargementdel'image:
p u b l i c c l a s s I m a g e D o w n l o a d e r e x t e n d s A s y n c T a s k < U R L , I n t e g e r , B i t m a p > {
p r i v a t e I m a g e V i e w i m a g e V i e w ;
p u b l i c I m a g e D o w n l o a d e r ( I m a g e V i e w i m a g e V i e w ) {
t h i s . i m a g e V i e w = i m a g e V i e w ;
}
@ O v e r r i d e
p r o t e c t e d B i t m a p d o I n B a c k g r o u n d ( U R L . . . u r l s ) {
/ * . . . * /
}
@ O v e r r i d e
p r o t e c t e d v o i d o n P o s t E x e c u t e ( B i t m a p b i t m a p ) {
i f ( b i t m a p ! = n u l l )
i m a g e V i e w . s e t I m a g e B i t m a p ( b i t m a p ) ;
}
}
14 . 12
Exemple - Connexion rseau
L'ac vitprincipale:
p u b l i c c l a s s M a i n A c t i v i t y e x t e n d s A c t i v i t y {
p r i v a t e I m a g e V i e w i m a g e V i e w ;
p r i v a t e E d i t T e x t u r l E d i t T e x t ;
@ O v e r r i d e
p r o t e c t e d v o i d o n C r e a t e ( B u n d l e s a v e d I n s t a n c e S t a t e ) {
s u p e r . o n C r e a t e ( s a v e d I n s t a n c e S t a t e ) ;
s e t C o n t e n t V i e w ( R . l a y o u t . a c t i v i t y _ m a i n ) ;
i m a g e V i e w = ( I m a g e V i e w ) f i n d V i e w B y I d ( R . i d . i m a g e V i e w ) ;
u r l E d i t T e x t = ( E d i t T e x t ) f i n d V i e w B y I d ( R . i d . u r l E d i t T e x t ) ;
}
}
14 . 13
Exemple - Connexion rseau
L'ac vitprincipale:
p u b l i c c l a s s M a i n A c t i v i t y e x t e n d s A c t i v i t y {
p r i v a t e I m a g e V i e w i m a g e V i e w ;
p r i v a t e E d i t T e x t u r l E d i t T e x t ;
/ * . . . * /
p u b l i c v o i d o n C l i c k ( V i e w v i e w ) {
I m a g e D o w n l o a d e r i m a g e D o w n l o a d e r = n e w I m a g e D o w n l o a d e r ( i m a g e V i e w ) ;
t r y {
U R L u r l = n e w U R L ( u r l E d i t T e x t . g e t T e x t ( ) . t o S t r i n g ( ) ) ;
i m a g e D o w n l o a d e r . e x e c u t e ( u r l ) ;
} c a t c h ( M a l f o r m e d U R L E x c e p t i o n e ) {
T o a s t . m a k e T e x t ( t h i s ,
g e t S t r i n g ( R . s t r i n g . m a l f o r m e d _ u r l ) ,
T o a s t . L E N G T H _ L O N G ) . s h o w ( ) ;
}
}
}
14 . 14
Services et threads
Nousvoulonscrerunservicepourtlchargerdesimages
Ceservicedoit:
14 . 15
IntentService
Laclasse IntentServicetend Serviceetpermetderalisercela:
p u b l i c c l a s s M y I n t e n t S e r v i c e e x t e n d s I n t e n t S e r v i c e {
p u b l i c M y I n t e n t S e r v i c e ( ) {
s u p e r ( " M y I n t e n t S e r v i c e " ) ;
}
@ O v e r r i d e
p r o t e c t e d v o i d o n H a n d l e I n t e n t ( I n t e n t i n t e n t ) {
t r y {
T h r e a d . s l e e p ( 5 0 0 0 ) ;
} c a t c h ( I n t e r r u p t e d E x c e p t i o n e ) {
T h r e a d . c u r r e n t T h r e a d ( ) . i n t e r r u p t ( ) ;
}
}
}
Leserviceestarrtquandtouslestraitementsontteectus
14 . 16
Communication de l'URL tlcharger
p u b l i c c l a s s D o w n l o a d e r S e r v i c e e x t e n d s I n t e n t S e r v i c e {
p u b l i c s t a t i c f i n a l S t r i n g U R L = " u r l " ;
p u b l i c s t a t i c f i n a l S t r i n g F I L E N A M E = " f i l e n a m e " ;
p u b l i c D o w n l o a d e r S e r v i c e ( ) {
s u p e r ( " D o w n l o a d e r S e r v i c e " ) ;
}
@ O v e r r i d e
p r o t e c t e d v o i d o n H a n d l e I n t e n t ( I n t e n t i n t e n t ) {
S t r i n g i n t e n t U r l = i n t e n t . g e t S t r i n g E x t r a ( U R L ) ;
S t r i n g i n t e n t F i l e n a m e = i n t e n t . g e t S t r i n g E x t r a ( F I L E N A M E ) ;
d o w n l o a d ( i n t e n t U r l , i n t e n t F i l e n a m e ) ;
}
I n t e n t i n t e n t = n e w I n t e n t ( t h i s , D o w n l o a d e r S e r v i c e . c l a s s ) ;
i n t e n t . p u t E x t r a ( D o w n l o a d e r S e r v i c e . U R L , " h t t p : / / . . . . " ) ;
i n t e n t . p u t E x t r a ( D o w n l o a d e r S e r v i c e . F I L E N A M E , " i m a g e . j p g " ) ;
s t a r t S e r v i c e ( i n t e n t ) ;
14 . 17
Tlchargement
p r i v a t e v o i d d o w n l o a d ( S t r i n g i n t e n t U r l , S t r i n g i n t e n t F i l e n a m e ) {
t r y {
U R L i n p u t U r l = n e w U R L ( i n t e n t U r l ) ;
F i l e o u t p u t F i l e = n e w F i l e (
E n v i r o n m e n t . g e t E x t e r n a l S t o r a g e P u b l i c D i r e c t o r y (
E n v i r o n m e n t . D I R E C T O R Y _ D O W N L O A D S
) ,
i n t e n t F i l e n a m e ) ;
t r y ( I n p u t S t r e a m i n p u t S t r e a m =
i n p u t U r l . o p e n C o n n e c t i o n ( ) . g e t I n p u t S t r e a m ( ) ;
O u t p u t S t r e a m o u t p u t S t r e a m = n e w F i l e O u t p u t S t r e a m ( o u t p u t F i l e )
) {
c o p y ( i n p u t S t r e a m , o u t p u t S t r e a m ) ;
b r o a d c a s t S u c c e s s ( i n t e n t U r l , o u t p u t F i l e . g e t A b s o l u t e P a t h ( ) ) ;
}
} c a t c h ( I O E x c e p t i o n e ) {
e . p r i n t S t a c k T r a c e ( ) ;
b r o a d c a s t E r r o r ( ) ;
}
}
14 . 18
Tlchargement
p r i v a t e v o i d c o p y ( I n p u t S t r e a m i n p u t S t r e a m ,
O u t p u t S t r e a m o u t p u t S t r e a m ) t h r o w s I O E x c e p t i o n {
b y t e [ ] b u f f e r = n e w b y t e [ 1 0 2 4 ] ;
f o r ( ; ; ) {
i n t b y t e s C o u n t = i n p u t S t r e a m . r e a d ( b u f f e r ) ;
i f ( b y t e s C o u n t = = - 1 ) b r e a k ;
o u t p u t S t r e a m . w r i t e ( b u f f e r , 0 , b y t e s C o u n t ) ;
}
}
14 . 19
Tlchargement
p u b l i c s t a t i c f i n a l i n t D O W N L O A D _ S U C C E S S = 1 ;
p u b l i c s t a t i c f i n a l i n t D O W N L O A D _ E R R O R = 2 ;
p u b l i c s t a t i c f i n a l S t r i n g U R L = " u r l " ;
p u b l i c s t a t i c f i n a l S t r i n g F I L E N A M E = " f i l e n a m e " ;
p u b l i c s t a t i c f i n a l S t r i n g R E S U L T _ C O D E = " r e s u l t _ c o d e " ;
p u b l i c s t a t i c f i n a l S t r i n g D O N E _ A C T I O N =
" c o m . u n i v _ a m u . c c i . d o w n l o a d e r . D O N E _ A C T I O N " ;
p r i v a t e v o i d b r o a d c a s t S u c c e s s ( S t r i n g u r l , S t r i n g f i l e n a m e ) {
I n t e n t i n t e n t = n e w I n t e n t ( D O N E _ A C T I O N ) ;
i n t e n t . p u t E x t r a ( U R L , u r l ) ;
i n t e n t . p u t E x t r a ( F I L E N A M E , f i l e n a m e ) ;
i n t e n t . p u t E x t r a ( R E S U L T _ C O D E , D O W N L O A D _ S U C C E S S ) ;
s e n d B r o a d c a s t ( i n t e n t ) ;
}
p r i v a t e v o i d b r o a d c a s t E r r o r ( ) {
I n t e n t i n t e n t = n e w I n t e n t ( D O N E _ A C T I O N ) ;
i n t e n t . p u t E x t r a ( R E S U L T _ C O D E , D O W N L O A D _ E R R O R ) ;
s e n d B r o a d c a s t ( i n t e n t ) ;
}
14 . 20
Le manifeste de l'application
< m a n i f e s t . . . >
< a p p l i c a t i o n . . . >
< s e r v i c e a n d r o i d : n a m e = " f r . u n i v _ a m u . c c i . d o w n l o a d e r . D o w n l o a d e r S e r v i c e "
a n d r o i d : e x p o r t e d = " t r u e " / >
< / a p p l i c a t i o n >
< / m a n i f e s t >
14 . 21
Appel au service dans la mme application
p u b l i c c l a s s M a i n A c t i v i t y e x t e n d s A c t i v i t y {
p r i v a t e I m a g e V i e w i m a g e V i e w ;
p r i v a t e E d i t T e x t e d i t T e x t ;
@ O v e r r i d e
p r o t e c t e d v o i d o n C r e a t e ( B u n d l e s a v e d I n s t a n c e S t a t e ) {
s u p e r . o n C r e a t e ( s a v e d I n s t a n c e S t a t e ) ;
s e t C o n t e n t V i e w ( R . l a y o u t . m a i n _ a c t i v i t y ) ;
i m a g e V i e w = ( I m a g e V i e w ) f i n d V i e w B y I d ( R . i d . i m a g e _ v i e w ) ;
e d i t T e x t = ( E d i t T e x t ) f i n d V i e w B y I d ( R . i d . e d i t _ t e x t ) ;
}
p u b l i c v o i d o n C
i e l i c k ( V w v i e w ) {
U r i u r i = U
s e r i . p a r ( e d i t T e x t . g e t T e x t ( ) . t o S t r i n g ( ) ) ;
I n t e n t i n t e
e w n t = n I n t e n t ( t h i s , D o w n l o a d e r S e r v i c e . c l a s s ) ;
i n t e n t . p u t E
o w x t r a ( D n l o a d e r S e r v i c e . U R L , u r i . t o S t r i n g ( ) ) ;
i n t e n t . p u t E
o w x t r a ( D n l o a d e r S e r v i c e . F I L E N A M E ,
u r i . g e t L a s t P a t h S e g m e n t ( ) ) ;
s t a r t S e r v i c e ( i n t e n t ) ;
}
}
14 . 22
Appel au service dans la mme application
p u b l i c c l a s s M a i n A c t i v i t y e x t e n d s A c t i v i t y {
p r i v a t e I m a g e V i e w i m a g e V i e w ;
p r i v a t e E d i t T e x t e d i t T e x t ;
@ O v e r r i d e
p r o t e c t e d v o i d o n C r e a t e ( B u n d l e s a v e d I n s t a n c e S t a t e ) {
s u p e r . o n C r e a t e ( s a v e d I n s t a n c e S t a t e ) ;
s e t C o n t e n t V i e w ( R . l a y o u t . m a i n _ a c t i v i t y ) ;
i m a g e V i e w = ( I m a g e V i e w ) f i n d V i e w B y I d ( R . i d . i m a g e _ v i e w ) ;
e d i t T e x t = ( E d i t T e x t ) f i n d V i e w B y I d ( R . i d . e d i t _ t e x t ) ;
}
p u b l i c v o i d o n C
i e l i c k ( V w v i e w ) {
U r i u r i = U
s e r i . p a r ( e d i t T e x t . g e t T e x t ( ) . t o S t r i n g ( ) ) ;
I n t e n t i n t e
e w n t = n I n t e n t ( t h i s , D o w n l o a d e r S e r v i c e . c l a s s ) ;
i n t e n t . p u t E
o w x t r a ( D n l o a d e r S e r v i c e . U R L , u r i . t o S t r i n g ( ) ) ;
i n t e n t . p u t E
o w x t r a ( D n l o a d e r S e r v i c e . F I L E N A M E ,
u r i . g e t L a s t P a t h S e g m e n t ( ) ) ;
s t a r t S e r v i c e ( i n t e n t ) ;
}
}
14 . 23
coute des "broadcasts" du service
p u b l i c c l a s s M a i n A c t i v i t y e x t e n d s A c t i v i t y {
@ O v e r r i d e
p r o t e c t e d v o i d o n R e s u m e ( ) {
s u p e r . o n R e s u m e ( ) ;
I n t e n t F i l t e r f i l t e r = n e w I n t e n t F i l t e r ( ) ;
f i l t e r . a d d A c t i o n ( D o w n l o a d e r S e r v i c e . D O N E _ A C T I O N ) ;
r e g i s t e r R e c e i v e r ( r e c e i v e r , f i l t e r ) ;
}
@ O v e r r i d e
p r o t e c t e d v o i d o n P a u s e ( ) {
s u p e r . o n P a u s e ( ) ;
u n r e g i s t e r R e c e i v e r ( r e c e i v e r ) ;
}
f i n a l p r i v a t e B r o a d c a s t R e c e i v e r r e c e i v e r = n e w B r o a d c a s t R e c e i v e r ( ) {
@ O v e r r i d e
p u b l i c v o i d o n R e c e i v e ( C o n t e x t c o n t e x t , I n t e n t i n t e n t ) {
/ * T O D O * /
}
} ;
}
14 . 24
Implmentation de la mthode onReceive
p u b l i c c l a s s M a i n A c t i v i t y e x t e n d s A c t i v i t y {
f i n a l p r i v a t e B r o a d c a s t R e c e i v e r r e c e i v e r = n e w B r o a d c a s t R e c e i v e r ( ) {
@ O v e r r i d e
p u b l i c v o i d o n R e c e i v e ( C o n t e x t c o n t e x t , I n t e n t i n t e n t ) {
s w i t c h ( i n t e n t . g e t I n t E x t r a ( D o w n l o a d e r S e r v i c e . R E S U L T _ C O D E , 0 ) ) {
c a s e D o w n l o a d e r S e r v i c e . D O W N L O A D _ S U C C E S S :
S t r i n g u r l =
i n t e n t . g e t S t r i n g E x t r a ( D o w n l o a d e r S e r v i c e . U R L ) ;
S t r i n g f i l e n a m e =
i n t e n t . g e t S t r i n g E x t r a ( D o w n l o a d e r S e r v i c e . F I L E N A M E ) ;
s e t B a c k g r o u n d I m a g e ( u r l , f i l e n a m e ) ;
b r e a k ;
c a s e D o w n l o a d e r S e r v i c e . D O W N L O A D _ E R R O R :
T o a s t . m a k e T e x t ( g e t A p p l i c a t i o n C o n t e x t ( ) ,
R . s t r i n g . d o w n l o a d _ e r r o r , T o a s t . L E N G T H _ L O N G ) . s h o w ( ) ;
b r e a k ;
}
}
} ;
14 . 25
Changement de l'image de fond de la vue
p u b l i c c l a s s M a i n A c t i v i t y e x t e n d s A c t i v i t y {
p r i v a t e v o i d s e t B a c k g r o u n d I m a g e ( S t r i n g u r l , S t r i n g f i l e n a m e ) {
i f ( ! e d i t T e x t . g e t T e x t ( ) . t o S t r i n g ( ) . e q u a l s ( u r l ) ) r e t u r n ;
B i t m a p b i t m a p = B i t m a p F a c t o r y . d e c o d e F i l e ( f i l e n a m e ) ;
i m a g e V i e w . s e t I m a g e B i t m a p ( b i t m a p ) ;
}
}
14 . 26
Utilisation du service de l'extrieur de l'application
p u b l i c c l a s s M a i n A c t i v i t y e x t e n d s A c t i v i t y {
p u b l i c v o i d o n C l i c k ( V i e w v i e w ) {
U r i u r i= U r i . p a r s e ( e d i t T e x t . g e t T e x t ( ) . t o S t r i n g ( ) ) ;
I n t e n t in t e n t = n e w I n t e n t ( ) ;
i n t e n t . s
e t C o m p o n e n t ( n e w C o m p o n e n t N a m e ( " f r . u n i v _ a m u . c c i . d o w n l o a d e r " ,
" f r . u n i v _ a m u . c c i . d o w n l o a d e r . D o w n l o a d e r S e r v i c e " ) ) ;
i n t e n t . p u t E x t r a ( D o w n l o a d e r S e r v i c e . U R L , u r i . t o S t r i n g ( ) ) ;
i n t e n t . p u t E x t r a ( D o w n l o a d e r S e r v i c e . F I L E N A M E , u r i . g e t L a s t P a t h S e g m e n t ( ) ) ;
s t a r t S e r v i c e ( i n t e n t ) ;
}
< m a n i f e s t . . . >
< a p p l i c a t i o n . . . >
< s e r v i c e a n d r o i d : n a m e = " f r . u n i v _ a m u . c c i . d o w n l o a d e r . D o w n l o a d e r S e r v i c e "
a n d r o i d : e x p o r t e d = " t r u e " / >
< / a p p l i c a t i o n >
< / m a n i f e s t >
14 . 27