我會做這樣的
// 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);
因此,而不是使一個變量來保存要傳遞給函數的值,你可以做到這一切的內聯。
編輯: 哦,順便說一句:請千萬不要用0
或8
爲View.setVisibility(...)
方法。這是一種非常糟糕的做法,如果價值觀未來發生變化,將會破壞您的申請。 View.VISIBLE
已經是public static final int
,這意味着編譯器將用0
替換所有出現的View.VISIBLE
。在字節碼中,與使用0
相同,沒有性能影響,但如果該值有變化,所有更改將在編譯時自動發生,並且不需要手動修改,而對於您的嘗試,您將擁有用新值替換每一個0
和8
!
很酷,運行良好。如果我想在if語句中調用另一個函數呢?例如。 ig isA,隱藏並運行另一個功能。 – bebeTech 2010-11-27 12:03:40