刷新片段不会调用onCreate()。正常吗?

时间:2019-10-31 23:03:26

标签: android android-fragments fragment fragment-lifecycle

当用户按下切换开关时,我需要重新创建一个片段。我正在使用此功能:

public void refreshFragment(){
    FragmentTransaction ft = getFragmentManager().beginTransaction();
    if (Build.VERSION.SDK_INT >= 26) {
        ft.setReorderingAllowed(false);
    }
    ft.detach(this).attach(this).commit();
}

它可以正常工作,但是在调用它时,不会调用onCreate,这是在重新创建后调用的方法序列:

onCreateView()
onViewCreated()
onResume()

这是第一次创建它时调用的方法序列:

onCreate()
onCreateView()
onViewCreated()
onResume()

显然,用该函数刷新片段时,永远不会再次调用onCreate。这将是永远吗?还是在某些情况下可以改变?我之所以这样问,是因为对我来说,onCreate仅在第一次调用时是完美的,因为这样我就可以在其中放置只执行一项而不是刷新时执行的代码。但是我需要知道它是否安全或刷新时可以调用onCreate。

2 个答案:

答案 0 :(得分:3)

onCreate()仅在创建片段时才会调用。分离和重新连接不会创建新的片段,但是如果您的活动被破坏并重新创建(例如,在轮换等配置更改或应用程序的进程被终止的情况下),onCreate()也将被调用。

答案 1 :(得分:1)

最近有一次Google谈话提到片段的生命周期将会改变。如果我没记错的话,他们说他们实际上将结合create和createView。但是,只要您不选择使用新的片段,那么您正确的做法是onCreate仅被调用一次。在片段被实例化时(如init)被调用,但是除非片段被完全销毁并重新创建,否则它将不会再次被调用。