尽管 Pragnani 的答案很接近,但它几乎没有教育价值。此外,他的第二个陈述还有一个更合适的选择。
我应该把这段代码放在片段的哪里?在 onCreate()? 创建视图()?onActivityCreated()? 为什么?
简短的回答是:要么做,onCreateView()
要么onActivityCreated()
做。视图层次结构要到 才会创建onCreateView()
,因此这是片段生命周期中最早可以膨胀视图并附加点击侦听器等的点。由于onActivityCreated()
将始终在 之后运行onCreateView()
,这也是一个合适的位置。onCreate()
可以跳过有利于系统临时分离片段并重新附加它,例如在保留片段时。
Pragnani 是正确的,他指出膨胀片段的视图与膨胀活动中的视图略有不同。更具体地说:片段没有定义findViewById()
方法,因此您需要在其他对象上调用它。
而不是使用getActivity().findViewById()
,你会想要getView().findViewById()
。这样做的原因是,如果您使用 Activity 进行视图查找,那么当多个具有相同视图 ID 的片段附加到它时,您会遇到麻烦。如果您在各种片段的布局中重用视图 ID,或者如果您显示两个显示不同数据的相同片段,就会出现这种情况。在这两种情况下,只会返回第一个匹配项,而您确实希望在片段的上下文中查找视图。这正是getView()
返回的内容,即片段的根视图(您在 中返回的onCreateView()
),因此适当地限制了查找的范围。