J'ai eu un tas de code dans une activité qui affiche un graphique en cours d'exécution de certaines données externes. Comme le code d'activité devenait sorte de encombrées, je décide d'extraire ce code et créer une classe GraphView
:Comment gérer le cycle de vie dans une classe dérivée de ViewGroup?
public class GraphView extends LinearLayout {
public GraphView(Context context, AttributeSet attrs) {
super(context, attrs);
LayoutInflater inflater = (LayoutInflater)
context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.graph_view, this, true);
}
public void start() {
// Perform initialization (bindings, timers, etc) here
}
public void stop() {
// Unbind, destroy timers, yadda yadda
}
.
.
.
}
mouvement des choses dans cette nouvelle LinearLayout
classe était simple dérivée de. Mais il y avait un code de gestion du cycle de vie associé à la création et à la destruction des timers et des écouteurs d'événements utilisés par ce graphique (je ne voulais pas que cette chose interroge en arrière-plan si l'activité était en pause, par exemple).
Issu d'un milieu MS Windows, je genre d'attendions à Overridable méthodes onCreate()
et onDestroy()
ou quelque chose de similaire, mais je n'ai rien trouvé de tel dans LinearLayout (ou l'un de ses membres hérités). Le fait de devoir laisser tout ce code d'initialisation dans l'activité, puis de le passer dans la vue, a semblé aller à l'encontre de l'objectif initial d'encapsuler tout ce code dans une vue réutilisable. J'ai fini par ajouter deux méthodes publiques supplémentaires à mon avis: start()
et stop()
. Je fais ces appels à partir des méthodes onResume()
et onPause()
de l'activité respectivement.
Cela semble fonctionner, mais j'ai l'impression d'utiliser du ruban adhésif ici. Est-ce que quelqu'un sait comment cela est généralement fait? J'ai l'impression qu'il me manque quelque chose ...
Aujourd'hui, je me suis posé la même question! :) –