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

Xan*_*der 16 java android oncreate android-fragments android-viewpager

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

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

在我的活动中,我在onCreate()方法中编写了一些代码.我举个例子来调用一些findViewById()s来将一些xml按钮链接到我的Activity.我还在方法中使一些视图不可见onCreate(),设置OnClickListener(),填充TextView文本并删除通知onCreate().

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

提前谢谢了!

MH.*_*MH. 22

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

我应该把这段代码放在片段里?在onCreate()?onCreateView()?onActivityCreated()?为什么?

简短的回答是:要么onCreateView()还是onActivityCreated()会做.视图层次结构将不会被创建onCreateView(),因此这是片段生命周期中最早的点,您可以膨胀视图并附加点击侦听器等.由于onActivityCreated()将始终运行onCreateView(),这也是一个合适的位置.onCreate()可以跳过有利于系统暂时分离片段并重新连接片段,例如当保留片段时.

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

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