有沒有人知道在實例化視圖時投射的原因?爲什麼要在android中實例化視圖
例如爲:TextView textView = (TextView) findViewById(R.id.textView);
有沒有人知道在實例化視圖時投射的原因?爲什麼要在android中實例化視圖
例如爲:TextView textView = (TextView) findViewById(R.id.textView);
這是因爲android系統中的所有觀點View類和findViewById的子類不知道子類東西,比如你可能有自己的自定義視圖。有沒有辦法android想知道你的視圖類,因此它只是返回超類,你將不得不手動將其轉換爲更具體的實現。
施放的原因是因爲Android中的返回類型findViewById()
函數是View
。
然而,與@Bajji在他的(當前接受的)答案中所說的相反,函數確實有一個意思是知道您期望獲得的View
類型並對該類執行自動投射。不幸的是,Android不利用此功能...
下面的函數是:
protected <T extends View> T findViewById(@IdRes int id) {
return (T) getRootView().findViewById(id);
}
,如果您已經定義了這個功能,那麼你可以這樣來做:
您可以在此blog post中獲得更多信息。
'findViewById()'沒有實例化一個視圖。 – CommonsWare
因爲findViewById()返回一個視圖,該視圖可以是任何視圖。 –
我討厭看到SO上的重要問題得到了降低,但對這些問題的不正確答案得到了高度評價。我明白,這個問題似乎微不足道,但爲什麼downvote? – Vasiliy