Вы находитесь на странице: 1из 283

Dveloppement Mobile sur Android

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

WorkcreatedandsharedbytheAndroidOpenSourceProjectandusedaccordingtotermsdescribedintheCrea veCommons2.5A ribu onLicense

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.

WorkcreatedandsharedbytheAndroidOpenSourceProjectandusedaccordingtotermsdescribedintheCrea veCommons2.5A ribu onLicense

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

WorkcreatedandsharedbytheAndroidOpenSourceProjectandusedaccordingtotermsdescribedintheCrea veCommons2.5A ribu onLicense

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:

WorkcreatedandsharedbytheAndroidOpenSourceProjectandusedaccordingtotermsdescribedintheCrea veCommons2.5A ribu onLicense


3 . 10
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 {
p r i v a t e i n t v a l u e = 0 ;
p r i v a t e B u t t o n b u t t o n ;

@ 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

WorkcreatedandsharedbytheAndroidOpenSourceProjectandusedaccordingtotermsdescribedintheCrea veCommons2.5A ribu onLicense

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)

int getInt(String key)

putDouble(String key, double value)

double getDouble(String key)

putString(String key, String value)

String getString(String key)

putStringArrayList(String key, ArrayList<String> list)

ArrayList<String> getStringArrayList(String key)

putCharArray(String key, char[] array)

char[] getCharArray(String key)


3 . 16
Les vues
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 ) ;
}
}
4.1
Les classes View et ViewGroup
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 ) ;
}
}

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

Avecun ic_launcher.pngdanslessousrpertoires drawable-*:


< 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 = " @ s t r i n g / h e l l o _ w o r l d "
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 : 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 " / >

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

Exempled'u lisa on:


< B u t t o n
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 = " 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 / b u t t o n _ t e x t "
a n d r o i d : t e x t C o l o r = " @ c o l o r / b u t t o n _ t e x t " / >

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:

reprsenteunepor ond'interfaceu lisateur


peuttreinsrdansuneac vit
peuttreu lisdansplusieursac vits
possdesonproprecycledevie,layout,etc.

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

FormFragmentdoitno erl'ac vitdelavalida onduformulaire

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

L'ac vitvaimplmenterce einterface


Lorsdel'excu ondelamthode onAttachdufragment,nous
allonsconserverunerfrenceandepouvoirno erl'ac vit.

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

Lelayoutdel'ac vitenmodepaysage(rpertoire layout-land):


< 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 = " h o r i z o n t 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 e i g h t = " 1 "
a n d r o i d : l a y o u t _ w i d t h = " 0 p x "
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 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 e i g h t = " 1 "
a n d r o i d : l a y o u t _ w i d t h = " 0 p x "
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 : 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 . 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

< m e n u 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 : 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 = " @ a n d r o i d : d r a w a b l e / i c _ m e d i a _ 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 = " a l w a y s " / >
< 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 = " @ a n d r o i d : d r a w a b l e / i c _ m e d i a _ n e x t "
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 >

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

< m e n u 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 : i d = " @ + i d / a c t i o n _ r e d "
a n d r o i d : t i t l e = " @ s t r i n g / r e d "
a n d r o i d : i c o n = " @ d r a w a b l e / i c _ r e d "
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 " / >
< i t e m a n d r o i d : i d = " @ + i d / a c t i o n _ b l u e "
a n d r o i d : t i t l e = " @ s t r i n g / b l u e "
a n d r o i d : i c o n = " @ d r a w a b l e / i c _ b l u e "
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 >

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

LayoutManager Adapter Dataset

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

L'ac vitimplmentece einterface:


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

Modica ondesdonnesetno ca ondel'adaptateur:


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

< 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 "
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 "
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 " >
< 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 "
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 : e m s = " 1 0 " / >
< / R e l a t i v e L a y o u t >

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

No ca ondel'ac vitlorsquel'u lisateurcliquesurunlment:


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 L i s t < O n I t e m C l i c k > l i s t e n e r s = n e w A r r a y L i s t < > ( ) ;

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

No ca ondel'ac vitlorsquel'u lisateurcliquesurunlment:


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

Rcep ondesno ca onsparl'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 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 ) { / * 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

Modica ondelavueenfonc ondelaslec ondel'lment:


p u b l i c c l a s sI 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 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 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"

Ges ondesvnementsdumenudumode``ac on'':


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 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 A c t i o n I t e m C l i c k e d ( A c t i o n M o d e m o d e , 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 l e t e : d e l e t e S e l e c t e d I t e m s ( ) ; r e t u r n t r u e ;
d e f a u l t : r e t u r n f a l s e ;
}
}
/ * . . . * /
}
}

8 . 27
Le mode "action"

Ges ondeladestruc ondumode``ac on'':


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

< F r a m 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 " >
< S c r o l l 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 " >
< 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 = " w r a p _ c o n t e n t "
a n d r o i d : i d = " @ + i d / t e x t V i e w " / >
< / S c r o l l V i e w >
< / F r a m e L a y o u t >

10
10 .. 11
10
Affichage du contenu d'un fichier

Cra ondel'instanceetconserva onduchemin:


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

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 ;

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

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

Lesautrestypespossibles: NULL, INTEGER, REALet BLOB;


Ilpeutyavoirplusieurstables.

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

Inser on( INSERT INTO):


p u b l i c v o i d i n s e r t ( 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 G u i d , a r t i c l e . g u i d ) ;
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 ) ;
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 . A r t i c l e s . t a b l e N a m e , n u l l , v a l u e s ) ;
}

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

SELECT guild, title FROM articles WHERE title LIKE "%s%":


p u b l i c C u r s o r g e t A r t i c l e
S t r i s ( n g s ) {
S Q L i t e D a t a b a s e e = d a t a b a s 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 ( ) ;
S t r i n g s e l e c t i o n = D
a b a s a t 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 ` " L I K E ? " ;
S t r i n g [ ] s e l e c t i o n A r
= { g s " % " ` s ` " % " } ;
S t r i n g [ ] c o l u m n s = {
a t a b D 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 T i t l 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 ,
c o l u m n s , s e l e c t i o n , s e l e c t i o n A r g s , 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();

boolean moveToPosition(int position);

int getColumnIndex(String columnName);

String getString(int cId), double getDouble(int cId)...

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

_ID rstname lastname


1 Bob Machin
2 Alice Truc
3 Oscar Chose
4 Trudy Bidule

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

L'interface BaseColumnscon ent _ID

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 ]

I N S E R T I N T O U S E R S ( F I R S T N A M E , L A S T N A M E ) V A L U E S ( " B o b " , " M a c h i n " ) ;

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

U P D A T E U S E R S S E T L A S T N A M E = " T r u c " W H E R E F I R S T N A M E = " 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
}

Dclaration dans le manifeste

< 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 )

Ensuite,onpeutu liser stopSelf(startId)pourprciser


quellerequtecorrespondlademanded'arrt.
13 . 6
Cration d'un service "bound" local

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

Unserviceest foregroundsil'u lisateurestconscientdeson


existence(lectured'unemusique,tlchargementencours,etc.)
Uneno ca onestachl'u lisateurpourluiperme re
d'interagiravecleservice(passerlamusiquesuivante,etc.)
Unservice foregroundn'estpasuncandidatpourlibrerdela
mmoire(delammefaonqu'uneac vitenpremierplan)

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

Pourquoi crer des threads ?


Pournejamaisbloquerlethreadprincipal

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

Simplica ondel'critured'unthreadavec AsyncTask:


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 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 . 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

U lisa ondelaclasse ImageDownloader:


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

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:

pouvoirtreu lispar rd'uneautreapplica on


"broadcaster"lefaitqu'ilaterminuntlchargement
Nepaseectuerlestlchargementssurlethreadprincipal
Traiterdefaonsquen ellelestlchargements

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 . . . >

< 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 " / >


< 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 " / >

< 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

Вам также может понравиться

  • Liste Exercices
    Liste Exercices
    Документ17 страниц
    Liste Exercices
    Abderrahim Benmokhtar
    Оценок пока нет
  • Liser Le Java
    Liser Le Java
    Документ69 страниц
    Liser Le Java
    Moustapha Yousfi Mk
    50% (2)
  • Liste Exercices
    Liste Exercices
    Документ17 страниц
    Liste Exercices
    Abderrahim Benmokhtar
    Оценок пока нет
  • ITIL - QRPCatalogue 2016 - FR - 1452075946
    ITIL - QRPCatalogue 2016 - FR - 1452075946
    Документ10 страниц
    ITIL - QRPCatalogue 2016 - FR - 1452075946
    Ghanou Starline
    Оценок пока нет
  • T1 Corrections QCM
    T1 Corrections QCM
    Документ34 страницы
    T1 Corrections QCM
    noradeep
    70% (33)
  • Cahier de Charge MFT
    Cahier de Charge MFT
    Документ5 страниц
    Cahier de Charge MFT
    Ghanou Starline
    Оценок пока нет
  • PDF
    PDF
    Документ109 страниц
    PDF
    Ghanou Starline
    Оценок пока нет
  • 2412 Chap06
    2412 Chap06
    Документ10 страниц
    2412 Chap06
    Jean-Pierre Kouame
    Оценок пока нет
  • JDOM Java
    JDOM Java
    Документ33 страницы
    JDOM Java
    Babacar Ngom
    Оценок пока нет
  • Model Reseau
    Model Reseau
    Документ1 страница
    Model Reseau
    Ghanou Starline
    Оценок пока нет
  • Cours de Richard Adapt e
    Cours de Richard Adapt e
    Документ173 страницы
    Cours de Richard Adapt e
    Ghanou Starline
    Оценок пока нет
  • Exam 200906 PDF
    Exam 200906 PDF
    Документ5 страниц
    Exam 200906 PDF
    Ghanou Starline
    Оценок пока нет
  • Support TP 03V2
    Support TP 03V2
    Документ27 страниц
    Support TP 03V2
    Ghanou Starline
    Оценок пока нет
  • LDDLMD
    LDDLMD
    Документ11 страниц
    LDDLMD
    mesidou
    Оценок пока нет
  • Sldomsax PDF
    Sldomsax PDF
    Документ33 страницы
    Sldomsax PDF
    Ghanou Starline
    Оценок пока нет
  • Structures de Donnes Et Java
    Structures de Donnes Et Java
    Документ50 страниц
    Structures de Donnes Et Java
    Ghanou Starline
    Оценок пока нет
  • Globus
    Globus
    Документ3 страницы
    Globus
    Ghanou Starline
    Оценок пока нет
  • Sans Titre
    Sans Titre
    Документ1 страница
    Sans Titre
    Ghanou Starline
    Оценок пока нет
  • NotionAlgo Part1
    NotionAlgo Part1
    Документ2 страницы
    NotionAlgo Part1
    Ghanou Starline
    Оценок пока нет
  • Poly Caml
    Poly Caml
    Документ34 страницы
    Poly Caml
    Ghanou Starline
    Оценок пока нет
  • But Couvertureminimale
    But Couvertureminimale
    Документ11 страниц
    But Couvertureminimale
    Sta Tox
    Оценок пока нет
  • Beptertiaire1 2003
    Beptertiaire1 2003
    Документ2 страницы
    Beptertiaire1 2003
    Ghanou Starline
    Оценок пока нет
  • Correction Santillessept 2003
    Correction Santillessept 2003
    Документ7 страниц
    Correction Santillessept 2003
    Ghanou Starline
    Оценок пока нет
  • Apprendre Le Langage HTML
    Apprendre Le Langage HTML
    Документ29 страниц
    Apprendre Le Langage HTML
    jaspe
    100% (1)
  • Analyse 100
    Analyse 100
    Документ102 страницы
    Analyse 100
    asljrmie
    Оценок пока нет
  • Architecture Des Ordinateurs
    Architecture Des Ordinateurs
    Документ25 страниц
    Architecture Des Ordinateurs
    yacine99
    Оценок пока нет
  • Cours Algorithmique
    Cours Algorithmique
    Документ57 страниц
    Cours Algorithmique
    bama_paris
    Оценок пока нет
  • TP4 JavaScript P1
    TP4 JavaScript P1
    Документ6 страниц
    TP4 JavaScript P1
    PROF PROF
    50% (2)
  • Cours PHP Js HTML Css
    Cours PHP Js HTML Css
    Документ99 страниц
    Cours PHP Js HTML Css
    ndiayeahmadou002
    Оценок пока нет
  • Asd2 PDF
    Asd2 PDF
    Документ11 страниц
    Asd2 PDF
    Ines Dhamer
    Оценок пока нет
  • Servlets JSP
    Servlets JSP
    Документ58 страниц
    Servlets JSP
    ABDESSADEQ EL MAKKIOUI
    Оценок пока нет
  • Juin 10
    Juin 10
    Документ8 страниц
    Juin 10
    Best Offensive
    Оценок пока нет
  • L2 Année TD 1 - POO Et Langage JAVA CORRIGE
    L2 Année TD 1 - POO Et Langage JAVA CORRIGE
    Документ16 страниц
    L2 Année TD 1 - POO Et Langage JAVA CORRIGE
    Mohamed Trabelsi
    Оценок пока нет
  • Chapitre 1 - Analyse Lexicale
    Chapitre 1 - Analyse Lexicale
    Документ6 страниц
    Chapitre 1 - Analyse Lexicale
    فركوس محمد العيد
    Оценок пока нет
  • Visual Basic 6
    Visual Basic 6
    Документ84 страницы
    Visual Basic 6
    Paul Dupont
    100% (1)
  • 3 ThéorieMesure
    3 ThéorieMesure
    Документ47 страниц
    3 ThéorieMesure
    hamid ouhnni
    Оценок пока нет
  • 5 - Spring Injection de Dépendances PDF
    5 - Spring Injection de Dépendances PDF
    Документ25 страниц
    5 - Spring Injection de Dépendances PDF
    Mohamed SAADAOUI
    Оценок пока нет
  • Comment Devélopper Une Application Basée Sur La Blockchain Ethereum Et VueJS Mise A Jour
    Comment Devélopper Une Application Basée Sur La Blockchain Ethereum Et VueJS Mise A Jour
    Документ19 страниц
    Comment Devélopper Une Application Basée Sur La Blockchain Ethereum Et VueJS Mise A Jour
    fatoumata kone
    Оценок пока нет
  • Calculatrice C
    Calculatrice C
    Документ2 страницы
    Calculatrice C
    gueuz.trash
    Оценок пока нет
  • Licence 1 SRIT
    Licence 1 SRIT
    Документ40 страниц
    Licence 1 SRIT
    Coul Adamo
    Оценок пока нет
  • Cours API
    Cours API
    Документ49 страниц
    Cours API
    Joseph Amond
    100% (1)
  • Langage C
    Langage C
    Документ121 страница
    Langage C
    Moz Asik
    Оценок пока нет
  • Mé Chapitre 03
    Mé Chapitre 03
    Документ15 страниц
    Mé Chapitre 03
    Daouali Hadjer
    Оценок пока нет
  • Algorithmique I
    Algorithmique I
    Документ5 страниц
    Algorithmique I
    Jeelian M Lukusa
    Оценок пока нет
  • TP 03 1
    TP 03 1
    Документ7 страниц
    TP 03 1
    Karim Karima
    Оценок пока нет
  • Remarques Et Astuces de Programmation en Assembleur
    Remarques Et Astuces de Programmation en Assembleur
    Документ31 страница
    Remarques Et Astuces de Programmation en Assembleur
    amani
    Оценок пока нет
  • Résolution Des Équations Non Linéaires
    Résolution Des Équations Non Linéaires
    Документ13 страниц
    Résolution Des Équations Non Linéaires
    Ata Hani
    Оценок пока нет
  • Pointeurs Sur Fonctions
    Pointeurs Sur Fonctions
    Документ19 страниц
    Pointeurs Sur Fonctions
    mor ndiaye
    Оценок пока нет
  • JAVASCRIPT
    JAVASCRIPT
    Документ6 страниц
    JAVASCRIPT
    DANE GHARIB
    Оценок пока нет
  • Support ASM
    Support ASM
    Документ9 страниц
    Support ASM
    Emma Djomo
    Оценок пока нет
  • Les Tours de Hanoi PDF
    Les Tours de Hanoi PDF
    Документ5 страниц
    Les Tours de Hanoi PDF
    Marius
    Оценок пока нет
  • 3 Application Framework Activity
    3 Application Framework Activity
    Документ50 страниц
    3 Application Framework Activity
    Yasmine Ker
    Оценок пока нет
  • CV Lamia Souissi
    CV Lamia Souissi
    Документ2 страницы
    CV Lamia Souissi
    Yasser Omari
    Оценок пока нет
  • Seance 1
    Seance 1
    Документ24 страницы
    Seance 1
    samgi
    Оценок пока нет
  • Formation UR5 Niveau 1
    Formation UR5 Niveau 1
    Документ237 страниц
    Formation UR5 Niveau 1
    Jojo Lynxi
    100% (1)