Обновление фрагмента не вызывает onCreate (). Это нормально? - PullRequest
1 голос
/ 01 ноября 2019

Мне нужно воссоздать фрагмент, когда пользователь нажимает на переключатель. Я использую эту функцию:

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 get только вызывается в первый раз, потому что тогда я могу поместить туда код, который я хочу выполнить только один раз, а не при обновлении. Но мне нужно знать, безопасно ли это или onCreate может вызываться при обновлении.

Спасибо

Ответы [ 2 ]

3 голосов
/ 01 ноября 2019

onCreate() будет вызываться только тогда, когда ваш фрагмент создается. Отсоединение и повторное присоединение не создают новых фрагментов, но onCreate() также будет вызываться, если ваша деятельность разрушена и воссоздана (например, при изменении конфигурации, например при ротации, или если процесс вашего приложения уничтожен).

1 голос
/ 01 ноября 2019

Недавно в Google говорилось, что жизненный цикл фрагмента будет меняться. Если я правильно помню, они сказали, что на самом деле они будут комбинировать create и createView. Однако, если вы не хотите использовать новые фрагменты, вы правы в том, что onCreate будет вызываться только один раз. Он вызывается, когда создается экземпляр фрагмента (например, init), но не будет вызываться снова, пока фрагмент не будет полностью уничтожен и воссоздан.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...