Je ferais comme ça
// Do this in your onCreate method and store the references as class member variables
showDisplay1 = (LinearLayout)findViewById(R.id.display1);
showDisplay2 = (LinearLayout)findViewById(R.id.display2);
showDisplay3 = (LinearLayout)findViewById(R.id.display3);
// Do this somehwere in your code
showDisplay1.setVisibility(isA?View.VISIBLE:View.GONE);
showDisplay2.setVisibility(isB?View.VISIBLE:View.GONE);
showDisplay3.setVisibility(isC?View.VISIBLE:View.GONE);
Pour efficacité il est important de stocker les références en tant que variables membres, comme appelant findViewById est une action assez coûteuse (comparée à l'accès à une variable membre), car vous n'aurez besoin de l'appeler qu'une seule fois lors de la création de l'application d (cela prend également en compte les changements d'orientation, car l'activité est détruite et recréée).
Et c'est assez propre et bien rangé. Inline si-expressions sont très utiles pour ce genre de fonctions, où vous n'avez que cela ou cela.
myFunction((expression)?if_value:else_value);
est courte
int value = 0;
if(expression) {
value = if_value;
} else {
value = else_value;
}
myFunction(value);
fondamentalement, vous pouvez ignorer la ()
si la variable est déjà un booléen, sinon vous devez mettre les crochets. Donc, cela fonctionnera bien aussi
myFunction((someVariable>3)?View.VISIBLE:View.GONE);
Edit2:
int value = 0;
if(somveVariable > 3) {
value = View.VISIBLE;
} else {
value = View.GONE;
}
myFunction(value);
Ainsi, au lieu de faire une variable pour tenir une valeur que vous voulez passer à une fonction, vous pouvez tout faire en ligne.
Edit: Oh et btw: S'il vous plaît, ne jamais utiliser 0
ou 8
pour la méthode View.setVisibility(...)
. Ceci est une très mauvaise pratique et va casser votre application si les valeurs changent à l'avenir. View.VISIBLE
est déjà un public static final int
, ce qui signifie que le compilateur remplacera toutes les occurrences de View.VISIBLE
par un 0
. Dans le code octet, il est identique à 0
, sans impact sur les performances, mais si la valeur doit être modifiée, tous les changements se produiront automatiquement au moment de la compilation avec le nouveau SDK et aucune modification manuelle n'est nécessaire, alors qu'avec votre tentative vous auriez pour remplacer chaque 0
et 8
avec les nouvelles valeurs!
Cool, ça a bien marché. Et si je voulais aussi appeler une autre fonction dans l'instruction if? Par exemple. ig isA, cache et exécute une autre fonction. – bebeTech
Vous pouvez faire cela aussi, tout ce qui fonctionne normalement 'if', y travailler aussi – Tseng
Hmmmm, je ne dois pas avoir la bonne syntaxe. J'essayais showDisplay1.setVisibility (isA? View.VISIBLE, functionA() ;: View.GONE); – bebeTech