我有自定義的視圖,我已經寫了一系列按鈕到預定義的方法。這些按鈕是我創建的視圖的子項。什麼是我可以在View子類中使用findViewById的最早時間?
我的問題是,我可以用來覆蓋使用一系列findViewById
的最早方法是什麼?我相信我不能在構造函數中使用它,因爲任何對findViewById
的調用都將返回null
。
謝謝,
布拉德。
我有自定義的視圖,我已經寫了一系列按鈕到預定義的方法。這些按鈕是我創建的視圖的子項。什麼是我可以在View子類中使用findViewById的最早時間?
我的問題是,我可以用來覆蓋使用一系列findViewById
的最早方法是什麼?我相信我不能在構造函數中使用它,因爲任何對findViewById
的調用都將返回null
。
謝謝,
布拉德。
如果你的類是子類的ViewGroup
,您可以覆蓋onFinishInflate
和使用findViewById
這個方法裏面:
public void onFinishInflate() {
super.onFinishInflate();
TextView view = (TextView) findViewById(R.id.view_id);
...
}
最早可以通過findViewById
訪問兒童是在膨脹佈局後立即進行的。
inflator.inflate(R.layout.main, this);
Button b = (Button)findViewById(R.id.button01);
如果你想在旁邊findViewById自定義視圖onAttachedToWindow可能是一個好地方,這可能是設置任何監聽器有用的,但是如果你在其他替代方法,只希望我主要是去類似下面:
View mView;
View getView(){
if(mView==null){
mView=findViewById(...);
}
return mView;
}
如果視圖的層次結構並不複雜,也許可以循環遍歷子項並在構造函數中比較id,儘管我沒有嘗試過。 – reTs