2011-07-13 1 views
4

Et quel est le meilleur moyen? Faites-moi savoir si la question a besoin d'éclaircissement.Quelqu'un peut-il expliquer la différence entre passer le contexte de l'activité à une classe interne et simplement le référencer avec MyActivity.this?

+0

C'est principalement une préférence personnelle. – Wroclai

+0

@Pompe de velo - La principale différence n'est-elle pas que MyActivity.this est beaucoup plus simple? – Marmoy

+2

Dépend de la situation réelle. Si votre classe interne est privée, c'est plus simple, mais qu'en est-il si vous le rendez public et que vous en créez une instance dans une autre classe? Si private = utilise MyActivity.this, sinon passez un 'Context' à la classe interne. C'est comme ça que je le fais. – Wroclai

Répondre

3

j'ai choisi de répondre à ma propre question, non pas parce que des réponses sont mauvais, mais parce que pendant qu'ils sont aussi bons, aucun fournissent une solution complète répondre.

Il semble que l'un des principaux facteurs à prendre en considération est réutilisabilité:

En utilisant MyActivity.this de se référer au contexte signifie que vous devrez modifier votre code si jamais vous décidez d'utiliser la classe un autre projet/classe/contexte. Passer le contexte dans le constructeur et le référencer comme une variable privée, vous permet de réutiliser la classe où vous voulez sans modifications.

Un autre facteur qui influencera votre choix est de savoir si votre classe interne est publique ou privée. Cela n'a pas de sens de rendre une classe interne publique, puis de référencer le contexte avec MyActivity.this. L'application forcerait à fermer le moment où vous utilisez la classe d'une autre activité. Je dirais cependant qu'une classe publique appartient à son propre fichier, mais cela dépend du développeur individuel. Finalement, il y a la question de la simplicité, car il est plus simple d'écrire MyActivity.this que d'implémenter un constructeur etc. Cette simplicité apparente peut revenir et vous mordre, comme vous pouvez le voir ci-dessus, si vous décidez que vous devez Utilisez la classe ailleurs.

Je vais continuer à utiliser MyActivity.this par simplicité pour tous les gestionnaires d'événements en ligne, mais pour toute autre situation, il semble que le passage du contexte au constructeur est la meilleure pratique.

1

Il s'agit plus d'un problème de conception car avoir une référence dans les deux sens aura le même résultat. Tenez compte de la complexité, du niveau d'accès et d'autres éléments de conception liés à la classe interne.

+0

Merci. Si le résultat est le même, y a-t-il une raison de passer le contexte en tant que paramètre à une classe interne? et ici je fais référence à la complexité qu'elle ajoute, si peu que ce soit. – Marmoy

+0

Si c'est une classe interne statique, définitivement. C'est vraiment une question de design et de modèle d'objet car la référence est équivalente. –

+0

Désolé, mais vos réponses sont plutôt vagues. Exactement comment cela affecte-t-il les choses si la classe est statique? – Marmoy

3

Pour réutiliser le passage, le contexte est plus facile car vous pouvez simplement le copier dans un autre projet. Sinon, vous devez changer tous MyActivity.this à OtherProjectActivity.this.

Mais surtout, il n'a pas d'importance ce que vous utilisez

+0

Un autre très bon point. – Marmoy

Questions connexes