我正将我的所有活动转换为碎片,以便我可以在ViewPager中使用它们。
我已经搜索了这个,但我找不到令人满意的答案,所以这就是我在这里问的原因。
在我的活动中,我在onCreate()
方法中编写了一些代码。例如,我调用一些findViewById()
来将一些xml按钮链接到我的Activity。我还在onCreate()
中设置了一些隐藏的视图,设置了OnClickListener()
,用文本填充了TextView
并删除了通知,所有这些都在onCreate()
方法中。
我的问题是:我应该在片段中放置此代码?在onCreate()? onCreateView()? onActivityCreated()?为什么?
非常感谢提前!
答案 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()