我已经读过这个: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 的生命周期,有几个候选者可以放置这段代码,但没有一个完全有效:
onCreate():在 onCreateView() 之前调用。因此 View 层次结构尚未初始化,调用网络服务是不安全的。
onCreateView():当我切换选项卡/运行显示的代码 fragment 时,它总是被调用。
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/