Vos premiers pas en Android – Partie III

logo+titre

J’espère que vous m’avez écouté dans la partie précédente et que vous avez une pause assez conséquente car dans troisième et dernière partie, on risque de voir beaucoup de chose. Il va donc falloir être au top de sa forme.

Un petit rappel pour ceux qui n’ont pas une grande mémoire, nous nous étions arrêté dans la seconde partie sur la fin du répertoire res avec le dossier values.
Explorons maintenant le dossier java et regardons ce qui s’y cache.

Le répertoire java

Dans ce répertoire, on pourra retrouver tout un tas de chose mais qui sont à leur actuelle trop avancé pour en parler dans ce tutoriel. Je vais me concentrer sur les activity qui sont les classes essentielles dans le développement Android.

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

Voilà à quoi devrait ressembler votre activity si vous n’y avez pas toucher jusqu’à maintenant. On va revenir sur chaque méthode pour en détailler leur utilité.

onCreate

La méthode onCreate est appelé à la création de l’activity, elle va nous permettre de relier l’activity avec sa vue. Comment ? Avec la méthode setContentViewOn voit que la méthode prend le  paramètre R.layout.activity_main. Pour schématiser, cela veut dire que l’activity va afficher la vue contenue dans le ficher activity_main.xml du dossier res/layout.

Une question que vous devez vous poser, comment récupérer un élément de la vue ?

Ceci est très simple, il faut utiliser la méthode findViewById avec comme paramètre l’id de l’élément. Une fois l’élément récupéré vous pourrez joué avec lui, par exemple changer le texte d’un TextView etc…

exemple :

TextView textView = (TextView)findViewById(R.id.identifiant_de_mon_textview);
textView.setText("Bonjour les français !");

onCreateOptionsMenu

Si vous vous rappelez des menus découvert dans le dossier res/menu (sinon un coup d’oeil ne fera pas de mal), c’est cette méthode qui va permettre de les afficher.

Il faut utiliser pour cela la méthode getMenuInflater().inflate(). Bien sûr il faut passer en paramètre l’id de votre menu, par exemple R.menu.nom_de_votre_menu.

exemple:

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

Rien de plus compliqué !

onOptionsItemSelected

Cette méthode vous permet de récupérer si l’utilisateur clic sur un item de votre menu. Vous pouvez ensuite en fonction de l’id de l’item réaliser une action.

Comprendre le cycle de vie d’une activité

Point important lorsque vous commencez à développer en Android, vos activités ont un cycle de vie à respécter, c’est à dire que contrairement aux objets normaux, ils ne possèdent pas seulement un contructeur (et un destructeur, en fonction du langage de programmation), mais possèdent leurs propres fonctions de création et de destruction.

Android-Activity-Lifecycle

 

 

onCreate

Cette méthode est appelée dès la construction de l’activité, elle sert à initialiser ce contrôleur. Cette méthode n’est appelée qu’une seule fois. C’est ici qu’il faudra définir la vue qui sera utilisée, en utilisant setContentView(int layoutId). Noter qu’elle reçoit en paramètre un Bundle savedInstanceState qui contiendra l’état sauvegardé de la dernière exécution de l’activité (par exemple lorsque nous effectuons une rotation de l’écran).

onStart

Directement appelée après le onCreate, dès que l’activité est affichée. Contrairement au onCreate, il peux être apellée plusieurs fois au court de la vie de l’activité (chaque fois que l’application reviens après un onStop).

onResume

Cette méthode est appelée à chaque fois que l’activité deviens visible à l’utilisateur. Ne pas confondre avec le onStart, qui ne s’effectue qu’une seule fois. Le onResume s’appelle à chaque fois que l’on reviens sur cette activité. Par exemple lorsque l’utilisateur éteint et rallume son écran.

onPause

Ennemi juré du onResume, le onPause est appelée à chaque fois que l’activité disparait de l’écran. Par exemple lorsque nous changeons d’activité courante, que l’application est détruite, ou que l’utilisateur verrouille son smartphone.

Vous devez ici arrêter mettre en pause vos traitements effectués en arrière plan, ou l’utilisations des capteurs de l’appareil (GPS, etc.). Pensez à les relancer dans le prochain onResume.

onStop

Le onStop est appelé lorsque l’activité n’est plus au premier plan.

onDestroy

Dernière instruction de l’activité, elle est appelée lorsque le processus lié à l’activité va être détruit. Vous ne pouvez pas l’appeler directement via this.onDestroy, seul le sytème en est capable.

Changer d’activité

Definition

Avant de commencer à changer d’activité, il faut bien comprendre de quoi il s’agit.

Lorsque l’on parle d’activité, on parle d’un écran, ayant une fonctionnalité “unique”, par exemple “Afficher la liste de mes contacts”. Si l’on veux afficher le détail d’un contact, nous allons donc faire appel à une seconde activité, qui n’aura que pour but d’afficher ce contact, elle sera totalement autonome et sans aucun lien avec l’activité précédente.

Nous aurons donc :

MainActivity.java

public class MainActivity extend AppCompatActivity{
    //affiche la liste des contacts
}

DetailActivity.java

public class DetailActivity extend AppCompatActivity{
    //affiche la liste des contacts
}

Pour être utilisable, chaque activité dois être déclarée dans le fichier AndroidManifest.xml :

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.tutosandroidfrance" >

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".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>

        <activity
            android:name=".DetailActivity"
            android:label="@string/app_name" />

    </application>

</manifest>

J’ai donc un application qui possède 2 activités MainActivity et DetailActivity.

<intent-filter>
       <action android:name="android.intent.action.MAIN" />

       <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

Va indiquer que MainActivity est l’activité principale, donc que ce sera celle-ci qui sera lancée lors de l’ouverture de l’application.

Démarrer une nouvelle activité

Pour démarrer une nouvelle activité, ils suffit d’appeler la méthode startActivity depuis votre activité actuelle. Cette méthode demande en paramètre un intent, qui va nous servir à indiquer au système quel activité lancer (mais pas que, je laisse aux plus curieux découvrir tous les autres usages des intents).

Cet intent se construit en prenant en paramètre l’activité courante et la classe de l’activité à lancer :

Intent intent = new Intent(this,DetailActivity.class);
startActivity(intent);

Echanger des informations entre les activités

Rien de plus simple, il vous suffit d’ajouter vos données en tant qu’Extra à votre intent :

MainActivity

Intent intent = new Intent(this,DetailActivity.class);

intent.putExtra("nom_contact","Florent CHAMPIGNY");

startActivity(intent);

et de le récupérer dans le onCreate de la seconde activité

DetailActivity

public void onCreate(Bundle savedInstanceState){
    ...

    Intent intent = getIntent();
    String nomContact = intent.getStringExtra("nom_contact);

    ...
}

Il est possible de passer la plupart des types primitifs (int, boolean, string, float…) via les Extras. Pour des types plus complexes (vos objets models), il suffit de les travailler un peu en les rendant Serializable, ou encore mieux Parcelable.

Résumé

public class MainActivity extends AppCompatActivity {

	Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener(){
        	public void onClick(View view){
        		startDetailActivty();
        	}
        });
    }

    public void startDetailActivty(){
    	Intent intent = new Intent(this,DetailActivity.class);
		intent.putExtra("nom_contact","Florent CHAMPIGNY");
		startActivity(intent);
    }
}

Un commentaire sur “Vos premiers pas en Android – Partie III

  1. Voilà donc un bon article, bien passionnant. J’ai beaucoup aimé et n’hésiterai pas à le recommander, c’est pas mal du tout ! Elsa Mondriet

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *