我有一個Activity類。在onCreate
中找到我需要的所有視圖應該非常好,然後只需引用這些字段,而不必致電findViewById
。但是,這樣做可以嗎?我可以將View對象存儲在實例字段中嗎?
無法在運行時爲視圖分配不同的對象嗎?例如,findViewById(res1) == findViewById(res1)
在任何時候都是如此嗎?
我有一個Activity類。在onCreate
中找到我需要的所有視圖應該非常好,然後只需引用這些字段,而不必致電findViewById
。但是,這樣做可以嗎?我可以將View對象存儲在實例字段中嗎?
無法在運行時爲視圖分配不同的對象嗎?例如,findViewById(res1) == findViewById(res1)
在任何時候都是如此嗎?
您可以在活動中爲您的視圖創建實例變量。並且
findViewById(res1) == findViewById(res1)
只要佈局不再膨脹或對內容視圖進行其他更改(替換視圖),則爲true。
但是,請勿保持對活動持有視圖的活動時間比較長的對象的視圖引用。就像在一個Singleton! (見see Avoiding Memory Leaks)
這可能會有所幫助:方法setContentView *會使視圖膨脹並且引用會改變。 –
是的,你可以做到這一點。這就是我在工作中90%的時間裏完成的。防爆。
private ImageView mSomeImage;
公共類ACTIV延伸活動{
public void onCreate(Bundle saveinstancestate){
Inialize your views here.
}
}
只有做到這一點,如果你需要,並用間前綴的成員變量。
這有幫助嗎?
嗨安迪...大多數代碼示例都是這樣做的,在onCreate中調用findViewById並擁有一個引用視圖的實例變量。 – JAL
@JAL:我知道,但它仍然很有趣,如果他們正在做的是對的=) – Andy
好的。另一種看待這個問題的方法是,你不能將參數傳遞給Activity的構造函數。 onCreate是構造函數,可以初始化視圖變量。我在網上有這個愚蠢的實驗。 https://sites.google.com/site/jalcomputing/home/mac-osx-android-programming-tutorial/stupid – JAL