9

super目前(Android API 17), Android Reference on Fragment中唯一提到的只是通过一些代码示例随便提及(不像Activity 上的 Android Reference,它仔细指出了super需要的地方)。

SO 建议根据需要搜索网络,或等待崩溃,以确定需要调用的super位置。我要求 SO 用户分享他们关于哪些 Fragment 生命周期方法需要调用super.

片段生命周期方法 - 需要调用super

  • onAttach()
  • onCreate()- 大概是的,因为Activity版本需要它
  • onCreateView()- 无论有无似乎都可以
  • onActivityCreated()
  • onViewStateRestored()
  • onStart()- 大概是的,因为Activity版本需要它
  • onResume()- 大概是的,因为Activity版本需要它

  • onPause()- 大概是的,因为Activity版本需要它

  • onStop()- 大概是的,因为Activity版本需要它
  • onDestroyView()
  • onDestroy()- 大概是的,因为Activity版本需要它
  • onDetach()

  • onSaveInstanceState()- 大概是的,因为Activity版本需要它

4

3 回答 3

5

所有对应的 Activity 生命周期方法,除了onSaveInstanceState需要调用 super。此外:

  • onAttach()- 是的
  • onActivityCreated()- 是的
  • onViewStateRestored()- 不是片段方法
  • onDestroyView()- 是的
  • onDetach()- 是的
  • onSaveInstanceState()- 从Fragment#onSaveInstanceState它看起来像一个否

所有需要调用 super 的方法在 android.app.Fragment 中共享其方法的第一行: mCalled = true;

这样,FragmentManager 可以检查 mCalled 是否为真,并在未调用时抛出 SuperNotCalledException。请参阅FragmentManager#moveToState以查看此实现。

于 2013-01-26T00:15:36.910 回答
0

使用 Eclipse 生成片段时,onCreateView 方法模板代码没有对 super.onCreateView 的调用。此外,WROX 出版的这本相当不错的书:Android 4 Application Development 在其示例生命周期代码中遗漏了它(它不会遗漏任何其他对 super 的调用)。

当然这两个来源都可能不正确,但是使用 Eclipse 模板而不添加 super.onCreateView 并没有给我带来问题。

于 2014-08-05T13:10:17.230 回答
0

我正在输入大写字母“O”而不是小写字母“o”

表示: OnCreate 而不是 onCreate 方法。

这是一个愚蠢的错误,但需要记住:)

谢谢

于 2016-02-16T06:21:59.900 回答