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

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

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

在我的活动中,我在方法中编写了一些代码。例如,我调用一些s,以便将一些xml按钮链接到我的活动。我还使一些视图在 中不可见,设置一个,用文本填充一个并删除一个通知,所有这些都在方法中。onCreate()findViewById()onCreate()OnClickListener()TextViewonCreate()

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

提前非常感谢!


答案 1

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

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

简短的回答是:要么要么做。视图层次结构直到 之前才会创建,因此这是片段生命周期中最早的点,您可以膨胀视图并附加单击侦听器等。因为 onActivityCreated() 将始终在 onCreateView() 之后运行,因此这也是一个合适的位置。 可以跳过,以支持系统暂时分离碎片并重新连接它,例如,在保留碎片时。onCreateView()onActivityCreated()onCreateView()onCreate()

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

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


答案 2

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

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

 Do all other operations in onCreateview()

推荐