最近我發現AndroidStudio提醒我刪除一些類的演員。我記得在舊時代,我們必須投下findViewById的結果,但現在沒有必要。不需要投下findViewById的結果嗎?
findViewById的結果仍然是視圖,所以我想知道爲什麼我們不需要強制類?
我找不到任何提及的文件,任何人都可以找到任何文件?
最近我發現AndroidStudio提醒我刪除一些類的演員。我記得在舊時代,我們必須投下findViewById的結果,但現在沒有必要。不需要投下findViewById的結果嗎?
findViewById的結果仍然是視圖,所以我想知道爲什麼我們不需要強制類?
我找不到任何提及的文件,任何人都可以找到任何文件?
從API 26開始,findViewById
將返回類型用於推理,因此不再需要投射。
舊的定義:
View findViewById(int id)
新定義:
<T extends View> T findViewById(int id)
因此,如果您compileSdk
至少爲26,這意味着你可以利用這個:)
謝謝,還有一個問題。我無法在sdk manager中找到sdk26的源代碼,請問哪裏可以找到這個新的定義? –
不幸的是,消息還沒有發佈,Android O仍在預覽中。當最終版本將被髮布時,資源也會出現。 –
如果我們刪除了演員陣容,我們的應用仍然可以在較低的設備上運行,對吧? – user1032613
Android Studio中的提醒刪除鑄件,如果您使用查看類的常見屬性,如可見或一些常見的方法,如的onClick()
例如:
((ImageView) findViewById(R.id.image_car)).setVisibility(View.VISIBLE);
在這種情況下,你可以簡單的寫:
findViewById(R.id.image_car).setVisibility(View.VISIBLE);
你仍然必須聲明類型,你必須寫:findViewById
在舊版本:
AutoCompleteTextView name=(AutoCompleteTextView) findViewById(R.id.autoCompleteTextView);
3.0與sdk 26:
AutoCompleteTextView name = findViewById(R.id.autoCompleteTextView);
根據這一article:
以下功能依賴於Java的泛型自動類型推斷,以消除需要人工鑄塑:
protected <T extends View> T findViewById(@IdRes int id) {
return (T) getRootView().findViewById(id);
}
,因爲現在它的' T \t findViewById(int id)'? –
Selvin
你需要在視圖類中沒有的任何操作的情況下投射,比如在ImageView的情況下,如果你想使用setImageResource,那麼你需要使用ImageView來投射findViewById –
但是我覺得知道變量類型有點不方便一目瞭然如果刪除了「冗餘」鑄件。 –