TP 03 Cycle de vie d une activité 1 ) Créer un nouveau projet Android 1. Comme au TP 02, mais nommez le différemment (par exemple ActivityLifeCycle) 2 ) Surchage des fonctions de callback 1. Ouvrez le fichier «MainActivity.java» 2. Ajoutez une surcharge des fonctions de callback d Android (voir annexe) : - oncreate - onstart - onrestart - onresume - onpause - onstop - ondestroy - onsaveinstancestate - onrestoreinstancestate 3. Affichez un message en console dans chacune d entre elles pour identifier à quel moment elles sont appelées (importer «android.util.log») : Log.i("MainActivity", "oncreate"); 4. Exécutez le projet 5. Si la console ne s affiche pas d elle même, cliquez sur le bouton «Logcat» : (probablement situé en bas à gauche, mais cela peut varier). Si vous n avez pas cette icône, faîtes «Window Show view Other Logcat» 6. Utilisez l application et regardez les messages affichés en console quand : - vous utilisez le bouton home - vous utilisez le bouton back - vous passez en mode paysage / portrait (sur l émulateur : CTRL + F12)
2 ) Interaction avec l interface graphique 1. Le but de cette partie est que vous fassiez en sorte que la TextView affiche le nombre de fois où votre application est passée dans la fonction «onresume». Pour tester si cela marche bien, vous pouvez appuyer sur le bouton home puis revenir à votre application. Infos utiles : - Affecter un id à la TextView : <TextView android:id="@+id/textview_onresume_count" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" /> - Récupérer une vue grâce à son id : TextView onresumecounttextview=(textview)this.findviewbyid(r.id.textview_onresume_count); - Changer le texte d une TextView : onresumecounttextview.settext(""); 2. Une fois que votre compteur fonctionne, regardez ce qu il se passe lorsque vous changez l orientation de l appareil. Essayez maintenant de faire en sorte que votre compteur s incrémente aussi lors de la rotation. Infos utiles : - Sauvegarde un entier dans un objet de type Bundle : outstate.putint("myint", myint); - Récupérer un entier contenu dans un objet de type Bundle : int myint = savedinstancestate.getint("myint"); 3. Si vous avez fini, vous pouvez essayer d ajouter un bouton dans le fichier de layout, puis faire en sorte qu au clic sur ce bouton, une popup s ouvre. Infos utiles : - Laisser MainActivity implémenter l interface «OnClickListener» : public class MainActivity extends Activity implements OnClickListener
- Réagir à l évènnement «onclick» : public void onclick(view v) { - Affecter le OnClickListener (la MainActivity dans ce cas) au bouton : Button popupbutton = (Button) this.findviewbyid(r.id.button_popup); popupbutton.setonclicklistener(this); - Gestion d une popup : // Create a dialog : AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.settitle("popup!"); builder.setmessage("popup message"); builder.setpositivebutton("ok", null); AlertDialog dialog = builder.create(); // Show a dialog : dialog.show(); // Dismiss a dialog : dialog.dismiss();
Annexe - Surchage des callback du cycle de vie package fr.ifremer.activitylifecycle; import android.app.activity; import android.os.bundle; import android.view.menu; public class MainActivity extends Activity { protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); // Load the layout : setcontentview(r.layout.activity_main); public boolean oncreateoptionsmenu(menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getmenuinflater().inflate(r.menu.main, menu); return true; protected void onstart() { super.onstart(); protected void onrestart() { super.onrestart(); protected void onresume() { super.onresume();
protected void onpause() { super.onresume(); protected void onstop() { super.onstop(); protected void ondestroy() { super.ondestroy(); protected void onsaveinstancestate(bundle outstate) { super.onsaveinstancestate(outstate); protected void onrestoreinstancestate(bundle savedinstancestate) { super.onrestoreinstancestate(savedinstancestate); Pour plus d informations sur le cycle de vie d une activité (avec notamment une application de test des fonctions de callback plus poussée que celle de ce TP) : http://developer.android.com/training/basics/activity-lifecycle/pausing.html