android - 找不到适合 fragment 的 onCreate() 等价物

标签 android android-fragments

我已经读过这个:http://developer.android.com/guide/components/fragments.html

我正在将一些 Activity 代码移动到一个全新的 fragment 中,但发现之前在 onCreate() 中的代码存在问题。

  • 使用 fragment 的目的:标签。

  • 在每个选项卡切换时调用的代码:

    FragmentManager fm = getSupportFragmentManager();

    FragmentTransaction ft = fm.beginTransaction();

    ft.replace(R.id.tabContent, fragment1);

    ft.commit();

其中fragment1、fragment2等是activity的实例变量,在onCreate中实例化:

fragment1 = new Fragment1();
//etc.
  • 我希望它们如何工作:就像 Activity (!) 一样,意味着:创建后 - 我调用我的网络服务,并且列表是第一次初始化的,没有更多的初始化,因此,当我切换选项卡时,列表仍然是我离开时的样子(滚动等),当我回来时,没有 View 初始化或网络服务调用,它只是再次出现。就像在 Activity 中一样,如果我启动另一个 Activity ,然后返回 - onCreate() 将不会被调用,只会调用 onResume()。因为我只在 onCreate() 中初始化,所以没问题。

我在 onCreate() 中调用一个网络服务来获取数据来填充列表。根据 fragment 的生命周期,有几个候选者可以放置这段代码,但没有一个完全有效:

  1. onCreate():在 onCreateView() 之前调用。因此 View 层次结构尚未初始化,调用网络服务是不安全的。

  2. onCreateView():当我切换选项卡/运行显示的代码 fragment 时,它总是被调用。

  3. onActivityCreated():我以为这会在创建 Activity 后被调用,但它在 Fragment.onCreateView() 之后被调用总是

作为附带问题,您是否建议在 fragment 中调用网络服务?没有在网上找到任何关于此的信息,但不知道为什么它不正确。

提前致谢!

最佳答案

对我来说,onActivityCreated 似乎或多或少是匹配阶段(此时已经可以在父 Activity 上调用 findViewById 并设置组件/分配字段 fragment 实例/设置(不添加)监听器。我的 onActivityCreated 是这样的,多次运行它不会造成任何伤害,并且考虑了传递的 Bundle 参数。

谈到 Web 服务,您可能可以从任何地方调用,但不能从 GUI 线程调用(Android 不允许)——因此请创建您自己的 therad。当对 Web 服务的某些调用挂起时,您可能不需要支持在 fragment 和 Activity 之间完全切换;如果确实需要,请使用 savedInstanceState 包在请求时保存和恢复状态。

关于android - 找不到适合 fragment 的 onCreate() 等价物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14693353/

相关文章:

java - 使用 Fragments、ViewPager、PullToRefresh 进行应用程序设计

Android:限制 Android Market 中支持的设备

java - Java线程中变量的作用域

android - 如何使Firebase用户在Google登录功能之外 flutter 朔迷离?

android - 在单击底部导航项之前, fragment 无法正确加载

android - 如何将 fragment 放置到 Activity 的默认根 ViewGroup 中?

android - Firebase A/B 测试推出领导者

java - 使用 recyclerView 项目的一些 `put extra` onClick 返回到上一个 Activity

android - 关于在 Activity/fragment 构造函数中定义资源布局 id 的问题

java - ViewPager fragment 中的 SwipeToRefresh 布局问题