等待该片段的正确方法可见

时间:2019-05-26 10:19:28

标签: android android-fragments kotlin google-play-services

我在回合制游戏中使用了片段,如何在执行该片段中的任何代码之前确保该片段可见并通过这种异步功能添加到上下文中?

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)是不够的,因为如果if语句返回false,则可能无法执行onInitiateMatch(it)函数。

我应该为此使用线程吗?

1 个答案:

答案 0 :(得分:0)

原来,执行supportFragmentManager.executePendingTransactions()解决了这个问题,我首先认为这不是解决问题的方法。