Travaux Pratiques

tp1 : Prise en main, extrait en partie du tp1 de l'unité SMB116

Thème: Une activité, cycle de vie

Question 1)

Proposez une activité permettant d'illustrer son cycle de vie, ci-dessous une idée d'interface avec deux boutons et un texte,

Le texte mentionne les appels aux méthodes onCreate, onStart, onResume, onPause, onStop, onDestroy.

Un extrait de code que vous pouvez réutiliser, ce sont les méthodes associées au clic sur les boutons start et finish

public void onClickStart(View v){
   AlertDialog
alertDialog = new AlertDialog.Builder(MainActivity.this).create();
  
alertDialog.setTitle("onClickStart");
  
alertDialog.setMessage("Démarrage d'une nouvelle activité, même code");
  
alertDialog.setButton(AlertDialog.BUTTON_POSITIVE, "OK",
  
new DialogInterface.OnClickListener() {
     
public void onClick(DialogInterface dialog, int which) {
       
dialog.dismiss();
        Intent
intent = new Intent(MainActivity.this,MainActivity.class);  // création d'une autre activité avec le même code
        startActivity(
intent);
     }
   });

  alertDialog.setButton(AlertDialog.BUTTON_NEGATIVE, "Annuler",
    
new DialogInterface.OnClickListener() {
      
public void onClick(DialogInterface dialog, int which) {
        
dialog.dismiss();
       }
   });
 
alertDialog.show();
  }

public void onClickFinish(View v){
   finish();
}

@Override
protected void onStart() {
  
super.onStart();
  
this.editText.append("onStart\n");
}

Le fichier AndroidManifest

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="cnam.smb116.tp1"
  android:versionCode="1"
  android:versionName="1.0" >

<uses-sdk
  android:minSdkVersion="8"
  android:targetSdkVersion="21" />

<application
  android:allowBackup="true"
  android:icon="@drawable/cnam_tp_smb116"
  android:label="@string/app_name"
  android:theme="@style/AppTheme" >
<activity
  android:name="cnam.smb116.tp1.MainActivity"
  android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>

</manifest>


  l'icône  cnam_tp_nsy102 est ici http://jfod.cnam.fr/NSY102/tp_android/cnam_tp_nsy102.jpg   à placer dans le dossier /resources/drawable/

  Les fichiers custom_button.xml (dossier /res/drawable/) activity_main.xml (dossier /res/layout)
ainsi que dimens.xml , colors.xml, styles.xml (dossier /res/values/)

 

Question 2)

Modifiez l'activité de la question précédente en insérant le code ci-dessous, cf. addFlags et onNewIntent, vérifiez le comportement à l'exécution en cliquant sur le bouton Start. http://developer.android.com/guide/components/tasks-and-back-stack.html

public void onClickStart(View v){
   AlertDialog
alertDialog = new AlertDialog.Builder(MainActivity.this).create();
  
alertDialog.setTitle("onClickStart");
  
alertDialog.setMessage("Démarrage d'une nouvelle activité, même code");
  
alertDialog.setButton(AlertDialog.BUTTON_POSITIVE, "OK",
  
new DialogInterface.OnClickListener() {
     
public void onClick(DialogInterface dialog, int which) {
       
dialog.dismiss();
        Intent
intent = new Intent(MainActivity.this,MainActivity.class);  //
        
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
        startActivity(
intent);
     }
   });

  alertDialog.setButton(AlertDialog.BUTTON_NEGATIVE, "Annuler",
    
new DialogInterface.OnClickListener() {
      
public void onClick(DialogInterface dialog, int which) {
        
dialog.dismiss();
       }
   });
 
alertDialog.show();
  }

public void onClickFinish(View v){
   finish();
}

@Override
protected void onNewIntent(Intent intent) {
  
  
this.editText.append("onNewIntent\n");
}