Я бы сделать это так
// 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);
Для эффективности важно сохранять ссылки в качестве переменных-членов, как вызов findViewById это довольно дорогое действие (по сравнению с доступом к переменной-члену), потому что вам когда-нибудь понадобится только один раз вызвать его при создании приложения d (это также объясняет изменения ориентации, так как активность уничтожается и снова воссоздается).
И это довольно чисто и аккуратно. Встроенные if-выражения очень полезны для таких функций, где у вас есть только то или это.
myFunction((expression)?if_value:else_value);
краткость
int value = 0;
if(expression) {
value = if_value;
} else {
value = else_value;
}
myFunction(value);
вы можете в основном игнорировать ()
, если переменная уже булева, если вы не должны ставить скобки. Так что это будет работать нормально тоже
myFunction((someVariable>3)?View.VISIBLE:View.GONE);
edit2:
int value = 0;
if(somveVariable > 3) {
value = View.VISIBLE;
} else {
value = View.GONE;
}
myFunction(value);
Так вместо того, чтобы переменный для хранения значения, которое вы хотите передать в функцию, вы можете сделать это все инлайн.
Edit: О, и кстати: Пожалуйста, никогда не используйте 0
или 8
для View.setVisibility(...)
метода. Это очень плохая практика и разорвет ваше приложение, если ценности когда-либо изменятся в будущем. View.VISIBLE
уже есть public static final int
, что означает, что компилятор заменит все вхождения View.VISIBLE
на 0
. В байтовом коде это то же самое, что и при использовании 0
, без влияния на производительность, но если значение когда-либо будет изменено, все изменения будут автоматически выполняться во время компиляции с новым SDK, и никакая ручная модификация не понадобится, а при вашей попытке заменить все 0
и 8
новыми значениями!
Прохладный, хорошо сработал. Что делать, если я хотел бы вызвать другую функцию внутри оператора if? Например. ig isA, скрыть, а также запустить другую функцию. – bebeTech 2010-11-27 12:03:40