Почему commitNow не устанавливает фрагмент в ноль? - PullRequest
0 голосов
/ 29 января 2020

Я пытался использовать commitNow для обеспечения синхронности транзакций фрагментов. Однако после моего тестирования я обнаружил, что по какой-то причине commitNow не удаляет фрагменты сразу.

Я добавил обработчик с postDelayed 100 миллисекунд, и фрагмент все еще не был нулевым. После этого я изменил postDelayed на 1000 миллисекунд и, наконец, фрагмент был нулевым.

Как я могу гарантировать , что фрагмент сразу становится нулевым после того, как я позвоню commitNow? Я попытался добавить supportFragmentManager.popBackStack(), но без помощи.

Если невозможно сразу сделать фрагмент нулевым, как я могу проверить, не находится ли этот фрагмент в стеке, перед добавлением того же фрагмента?

ОБНОВЛЕНИЕ Я обнаружил, что если я удалил setCustomAnimations, то транзакции действительно происходят немедленно. Как я могу наблюдать, когда setCustomAnimations закончится?

val fragment = supportFragmentManager.findFragmentByTag(DEMO_FRAGMENT)
    if (fragment != null) {
        Log.d("test", "DEMO_FRAGMENT is not null")
        val fragmentTransaction = supportFragmentManager.beginTransaction()
            fragmentTransaction.setCustomAnimations(R.anim.custom_fade_in, R.anim.custom_fade_out)
                    .remove(fragment).commitNow()
            supportFragmentManager.popBackStack();
            Log.d("test", "is fragment null:${supportFragmentManager.findFragmentByTag(DEMO_FRAGMENT) == null}")
            Handler().postDelayed({
                Log.d("test", "is fragment null:${supportFragmentManager.findFragmentByTag(DEMO_FRAGMENT) == null}")
            }, 1000)
        } 
    }

1 Ответ

0 голосов
/ 29 января 2020

Для этого вы должны использовать popBackStackImmediate(). Подробнее здесь

...