Я использую фрагменты для своей пошаговой игры. Как я могу быть уверен, что фрагмент виден и добавлен в контекст в такой асинхронной функции, прежде чем выполнять какой-либо код в этом фрагменте?
fun respondToRematchInvitation(invitation : Invitation) {
if (winFragment.isVisible) {
val builder = AlertDialog.Builder(this)
builder.setTitle("Accept invitation for rematch?")
builder.setMessage("Are you sure?")
builder.setPositiveButton("Yes") { _, _ ->
turnBasedMultiplayerClient.acceptInvitation(invitation.invitationId)
.addOnSuccessListener {
Log.d(TAG, "Invitation accepted succesfully")
isDoingTurn = false
gameFragment = GameFragment()
supportFragmentManager.beginTransaction().replace(R.id.fragment_container, gameFragment).addToBackStack(null).commit()
onInitiateMatch(it) //error happens here
}.addOnFailureListener {
createFailureListener("Accepting invitation failed")
}
}
val dialog : AlertDialog = builder.create()
dialog.show()
Теперь в onInitiateMatch(it)
у меня есть некоторый код, который модифицирует gameFragment, например, возможное получение игровых данных противников и другая инициализация. Простого использования if (gameFragment.isVisible)
или if (gameFragment.isAdded)
недостаточно, поскольку функция onInitiateMatch(it)
может не выполняться, если этот оператор if возвращает false.
Должен ли я использовать темы для этого?