閱讀“Head First Android Development”,我在第 367 頁注意到了這個問題。
該代碼是 Fragment 的實作,并且覆寫了幾個生命周期方法,即onCreateView和onStart。
onStart() 看起來像這樣:
@Override
public void onStart() {
super.onStart();
...
}
而onCreateView看起來像這樣:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_workout_detail, container, false);
}
請注意,這onStart包括對覆寫方法的呼叫 via super.onStart(),而onCreateView不會覆寫其覆寫方法。
為什么onStart撥打super電話,而不撥打電話onCreateView?
同樣在此頁面上,還有粗體文本,內容如下:
當您實作任何片段生命周期方法時,您應該始終呼叫超類。
如果是這種情況,那么為什么該onCreateView方法不呼叫超類呢?
有問題的頁面如下所示。

uj5u.com熱心網友回復:
該評論是正確的。您應該始終呼叫超類生命周期方法。因為他們做事。
onCreateView片段如下:

這mContentLayoutId是一個布局 Res id,您可以在片段的建構式中使用它:

它的作用是膨脹資源布局mContentLayoutId,您可以將其傳遞給片段的建構式并回傳結果,如果未設定則回傳 null。
因為你想擴大你的布局,你不需要這個。雖然你可以呼叫它,但它沒有任何效果(除非你將布局資源傳遞給片段建構式并想要對回傳視圖做一些事情,我不建議這樣做,因為onViewCreated存在。
uj5u.com熱心網友回復:
為什么 onStart 會進行超級呼叫,而 onCreateView 不會?
簡短的回答是你的書可能很舊。
如果您檢查源代碼,您會發現 onCreateView 僅在您提供布局資源 ID 時才起作用。預計您將自己提供一個視圖,因此如果您要覆寫該方法,則呼叫超類毫無用處。此外,onCreateView過去甚至沒有做那么多,它只會回傳 null,所以呼叫它沒有任何意義。這可能就是你寫書時的作業方式。
對比一下,你可以看到 onStart 不僅有邏輯,還會主動檢查你是否呼叫了它(mCalled = true),如果沒有呼叫它就會拋出例外。
因此,對于某些方法,呼叫它是可選的super并且不會產生任何效果,而其他方法基本上是必需的(或者你得到一個 Exception.
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/421581.html
標籤:
