Я пытался использовать 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)
}
}