2016-06-28 51 views
-1

有沒有人知道在實例化視圖時投射的原因?爲什麼要在android中實例化視圖

例如爲:TextView textView = (TextView) findViewById(R.id.textView);

+1

'findViewById()'沒有實例化一個視圖。 – CommonsWare

+0

因爲findViewById()返回一個視圖,該視圖可以是任何視圖。 –

+0

我討厭看到SO上的重要問題得到了降低,但對這些問題的不正確答案得到了高度評​​價。我明白,這個問題似乎微不足道,但爲什麼downvote? – Vasiliy

回答

5

這是因爲android系統中的所有觀點View類和findViewById的子類不知道子類東西,比如你可能有自己的自定義視圖。有沒有辦法android想知道你的視圖類,因此它只是返回超類,你將不得不手動將其轉換爲更具體的實現。

1

施放的原因是因爲Android中的返回類型findViewById()函數是View

然而,與@Bajji在他的(當前接受的)答案中所說的相反,函數確實有一個意思是知道您期望獲得的View類型並對該類執行自動投射。不幸的是,Android不利用此功能...

下面的函數是:

protected <T extends View> T findViewById(@IdRes int id) { 
    return (T) getRootView().findViewById(id); 
} 

,如果您已經定義了這個功能,那麼你可以這樣來做:

您可以在此blog post中獲得更多信息。

相關問題