Catégories

Je les lis (et ils le valent bien!)

Dév Android SRDice : Mutualisation du code Java

Logo AndroidNous aurons pour SRDice 2 écrans : un pour les Tests Simples, un second pour les Tests Étendus. Après avoir étudié le développement de la méthode pour lancer une activity depuis une autre (et donc d’un écran à un autre) dans une application Android, je me suis posé la question de mutualiser certaines choses dans le code Java.


Dans un premier temps j’ai vu à mutualiser du code des Activity : On crée une class étendant Activity dans laquelle on met le code partagé entre chaque activity puis on déclare les activity correspondant aux écrans en étendant notre classe :

SRDiceActivity contiendra toutes les méthodes communes aux deux activity:

public class SRDiceActivity extends Activity

SRDSimpleActivity contient le code pour la gestion des tests simples (le SRDice version 1) :

public class SRDSimpleActivity extends SRDiceActivity

SRDExtendedActivity contient le code pour la gestion des tests étendus (la nouveauté SRDice version 2) :

public class SRDExtendedActivity extends SRDiceActivity

Avant toutes choses, un point à ne pas oublier est de déclarer dans le AndroidManifest les Activity qui servent en tant que tel : SRDSimpleActivity et SRDExtendedActivity. SRDiceActivity n’en est pas une.
Dans un premier temps, j’ai saucissonné mon code de façon à ce que le SRDice V1 fonctionne sans changement. Il a fallu d’abord réfléchir à ce qui allait rester dans SRDSimpleActivity et ce qui allait partir dans SRDiceActivity.
Petite liste des méthodes/fonctionnalités communes qui trouvent leur place donc uniquement dans SRDiceActivity :

Dans SRDSimpleActivity:

  • La définition de la vue liée avec setContentView(R.layout.srd_simple)
  • Les écouteurs des boutons de la vue srd_simple liée à SRDSimpleActivity
  • L’affichage de la boite de dialog de Résultat

Comme on peut le voir, l’Affichage des boites de dialog se retrouve dans les deux listes !

Du coup j’ai créé le onCreateDialog à la fois dans SRDiceActivity (avec les gestion des cas qui seront communs) et dans SRDSimpleActivity (avec la gestion du cas particulier du Résultat). Arrivé à ce point se pose la question de comment faire pour que ça marche dans tous les cas !

Tout d’abord, il faut bien avoir conscience que puisque le Dialog est appelé depuis SRDSimpleActivity, c’est donc le onCreateDialog de SRDSimpleActivity qui va être appelé. Mais du coup comment faire pour que les boites de dialog génériques fonctionnent aussi ?

Un point à ne pas oublier en Programmation Orienté Objet (POO) comme Java que l’on peut appeler une méthode de la classe parente même si cette méthode existe (donc avec le même nom) dans la classe fille. C’est pour cela que mon onCreateDialog dans SRDSimpleActivity est ainsi :

	protected Dialog onCreateDialog(int id, final Bundle bundle) {
		if(id == DIALOG_RESULT)
		{
			//Traitements propres à la boite dialog DIALOG_RESULT
			return dialog;
		}
		else
		{
			return super.onCreateDialog(id, bundle);
		}
	}

En Java, on utilise « super » pour désigner la classe mère, soit ici dans le else on a l’appel de la méthode onCreateDialog de SRDiceActivity.

Maintenant que les fonctionnalités de SRDice V1 sont OK, il faut voir à mutualiser les layouts, ce qui fera l’objet du billet suivant !

1 comment to Dév Android SRDice : Mutualisation du code Java

Leave a Reply

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

  

  

  

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.