Android:在片段中放置活动的onCreate()代码的位置?

时间:2013-03-07 17:30:42

标签: java android android-fragments android-viewpager oncreate

我正将我的所有活动转换为碎片,以便我可以在ViewPager中使用它们。

我已经搜索了这个,但我找不到令人满意的答案,所以这就是我在这里问的原因。

在我的活动中,我在onCreate()方法中编写了一些代码。例如,我调用一些findViewById()来将一些xml按钮链接到我的Activity。我还在onCreate()中设置了一些隐藏的视图,设置了OnClickListener(),用文本填充了TextView并删除了通知,所有这些都在onCreate()方法中。

我的问题是:我应该在片段中放置此代码?在onCreate()? onCreateView()? onActivityCreated()?为什么?

非常感谢提前!

2 个答案:

答案 0 :(得分:22)

虽然Pragnani的答案很接近,但它的教育价值却很小。此外,他的第二个陈述还有一个更合适的选择。

  

我应该在片段中放置此代码?在onCreate()?   onCreateView()? onActivityCreated()?为什么?

简短的回答是:onCreateView()onActivityCreated()都可以。在onCreateView()之前不会创建视图层次结构,因此这是片段生命周期中最早的点,您可以膨胀视图并附加点击侦听器等。Since onActivityCreated() will always be run after onCreateView(),这也是一个合适的位置。可以跳过onCreate()以支持系统临时分离片段并重新连接它,例如,何时retaining fragments

Pragnani是正确的,指出膨胀片段的视图与活动中的膨胀视图略有不同。更具体地说:片段没有定义findViewById()方法,因此您需要在其他对象上调用它。

您需要 getActivity().findViewById() ,而非使用getView().findViewById()。这样做的原因是,如果您将活动用于视图查找,那么当具有相同视图ID的多个片段附加到该视图时,您将遇到麻烦。如果在各种片段的布局中重复使用视图ID,或者显示两个显示不同数据的相同片段,则会出现这种情况。在这两种情况下,只会返回第一个匹配,而您真的希望在片段的conext中查找视图。这正是getView()返回的内容,片段的根视图(您在onCreateView()中返回的),因此适当地限制了查找的范围。

答案 1 :(得分:3)

1. 将onCreate留空,只需调用super.onCreate()

2. 使用getActivity()而不是findViewById()。findViewById()    总是使用getActivity(),你需要视图的上下文。

 Do all other operations in onCreateview()