【问题标题】:Android: Where to put activity's onCreate() code in a fragment?Android:将活动的 onCreate() 代码放在片段中的什么位置?
【发布时间】:2013-03-07 17:30:42
【问题描述】:

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

我已经搜索过这个,但我找不到令人满意的答案,所以我在这里问它。

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

我的问题是:我应该把这段代码放在片段的哪里?在 onCreate()?创建视图()? onActivityCreated()?为什么?

提前非常感谢!

【问题讨论】:

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


    【解决方案1】:

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

    我应该把这段代码放在片段的什么地方?在 onCreate()? 创建视图()? onActivityCreated()?为什么?

    简短的回答是:onCreateView()onActivityCreated() 都可以。直到onCreateView() 才会创建视图层次结构,因此这是片段生命周期中最早可以扩展视图并附加点击侦听器等的时间点。Since onActivityCreated() will always be run after onCreateView(),这也是一个合适的位置。 onCreate() 可能会被跳过,以支持系统暂时分离片段并重新附加它,例如当retaining fragments.

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

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

    【讨论】:

    • 非常感谢您的全面回答!这正是我所需要的!
    • 我无法在onCreateView() 中调用getView(),它给了我一个NullPointerException
    • 那是正确的:getView()onCreateView() 返回之前不会设置 - 也许我应该更明确地说。但是,由于您在 onCreateView() 中膨胀根视图,因此您不必调用 getView(),而是直接在最终返回的视图上调用 findViewById()。举个例子:见CountingFragment
    • Rather than using getActivity().findViewById(), you'll want getView().findViewById() 这就是重点。非常感谢一整天我都在摸不着头脑,为什么我的ViewPager 不能正常工作是我使用getActivity() 来查找我的片段视图的原因。我认为只应使用查找片段视图getView()
    【解决方案2】:

    1.将 onCreate 留空,然后调用 super.onCreate()

    2.使用 getActivity().findViewById() 代替 findViewById() 始终在需要视图上下文的地方使用 getActivity()。

     Do all other operations in onCreateview()
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-19
    • 2017-08-29
    • 1970-01-01
    • 1970-01-01
    • 2015-01-06
    • 2016-02-13
    相关资源
    最近更新 更多