在 Android 片段中,为什么不在 `onCreateView` 上调用超类?
In an Android Fragment, why is a call to superclass not made on `onCreateView`?
通读“Head First Android Development”,我在第 367 页注意到了这个问题。
该代码是一个片段的实现,并且覆盖了几个生命周期方法,即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
包括通过 super.onStart()
调用被覆盖的方法,而 onCreateView
不调用其被覆盖的方法。
为什么 onStart
进行 super
调用,而 onCreateView
不进行调用?
同样在此页面上,有粗体文字,阅读:
You should always call up to the superclass when you implement any fragment lifecycle methods.
如果是这样,那为什么onCreateView
方法不调用父类呢?
问题页面如下所示。
Why does onStart make the super call, while onCreateView does not?
简短的回答是你的书可能很旧。
如果你查看源代码,you see that onCreateView only does something if you provide a layout resource ID。预计您将自己提供一个视图,因此如果您重写该方法,则调用 super class 没有任何用处。此外,onCreateView
过去甚至不会做那么多,它只会 return null,所以调用它没有任何意义。这可能是您写书时的工作方式。
相比之下,you can see that onStart not only has logic, but actively checks if you've called it (mCalled = true
) and throws an exception if you didn't call it。
因此对于某些方法,调用 super
是可选的并且不会产生任何影响,而其他方法基本上是必需的(否则您会得到异常)。
该评论是正确的。您应该总是 调用超类生命周期方法。因为他们做事。
onCreateView
Fragment如下:
mContentLayoutId
是一个布局 Res id,您可以在片段的构造函数中使用它:
它的作用是膨胀资源布局 mContentLayoutId
,您可以将其传递给片段的构造函数和 return 结果,如果未设置 return null。
因为你想膨胀你的布局,你不需要这个。虽然你可以调用它,但它没有效果(除非你将布局资源传递给片段构造函数并想对 return 视图做一些事情,我不推荐因为 onViewCreated
存在。
通读“Head First Android Development”,我在第 367 页注意到了这个问题。
该代码是一个片段的实现,并且覆盖了几个生命周期方法,即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
包括通过 super.onStart()
调用被覆盖的方法,而 onCreateView
不调用其被覆盖的方法。
为什么 onStart
进行 super
调用,而 onCreateView
不进行调用?
同样在此页面上,有粗体文字,阅读:
You should always call up to the superclass when you implement any fragment lifecycle methods.
如果是这样,那为什么onCreateView
方法不调用父类呢?
问题页面如下所示。
Why does onStart make the super call, while onCreateView does not?
简短的回答是你的书可能很旧。
如果你查看源代码,you see that onCreateView only does something if you provide a layout resource ID。预计您将自己提供一个视图,因此如果您重写该方法,则调用 super class 没有任何用处。此外,onCreateView
过去甚至不会做那么多,它只会 return null,所以调用它没有任何意义。这可能是您写书时的工作方式。
相比之下,you can see that onStart not only has logic, but actively checks if you've called it (mCalled = true
) and throws an exception if you didn't call it。
因此对于某些方法,调用 super
是可选的并且不会产生任何影响,而其他方法基本上是必需的(否则您会得到异常)。
该评论是正确的。您应该总是 调用超类生命周期方法。因为他们做事。
onCreateView
Fragment如下:
mContentLayoutId
是一个布局 Res id,您可以在片段的构造函数中使用它:
它的作用是膨胀资源布局 mContentLayoutId
,您可以将其传递给片段的构造函数和 return 结果,如果未设置 return null。
因为你想膨胀你的布局,你不需要这个。虽然你可以调用它,但它没有效果(除非你将布局资源传递给片段构造函数并想对 return 视图做一些事情,我不推荐因为 onViewCreated
存在。