Как заменить startActivityForResult на API Result Activity? - PullRequest
2 голосов
/ 27 апреля 2020

У меня есть основное действие, которое служит точкой входа для вызова различных действий, в зависимости от условия. Среди прочего, я использую Firebase Auth для управления входом пользователя:

startActivityForResult(
            AuthUI.getInstance().createSignInIntentBuilder()
                    .setAvailableProviders(providers)
                    .build(),
            RC_SIGN_IN)

Я перезаписываю onActivityResult(), чтобы различать guish возвращенное намерение / данные, например:

 override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    when (requestCode) {

        REQUEST_CODE_1 -> {
          // update UI and stuff
        }

        RC_SIGN_IN -> {
          // check Firebase log in
        }
        // ...
    }
}

С помощью API Result Activity, который настоятельно рекомендуется в документации , я получаю, что должен сделать prepareCall() до ActivityResultLauncher и убедиться, что активность находится в созданном состоянии при запуске, но Я до сих пор не понимаю, как изящно обрабатывать несколько результатов деятельности (по крайней мере, в одном месте), как в onActivityResult().

Глядя на в этой статье , кажется, мне нужно реализовать множественные дочерние внутренние классы типа ActivityResultContract (следовательно, множественные prepareCall()?), Потому что они должны быть разными контрактами , я прав? Может кто-нибудь показать мне пример скелета, который отражает выше onActivityResult() logi c?

1 Ответ

0 голосов
/ 03 мая 2020

Вы можете вызывать столько действий для результата, сколько вам потребуется sh и иметь отдельный обратный вызов для каждого:

    val startForResult = prepareCall(ActivityResultContracts.StartActivityForResult())
    { result: ActivityResult ->
        if (result.resultCode == Activity.RESULT_OK) {
            //  you will get result here in result.data
            }

        }
    }

    startForResult(Intent(activity, CameraCaptureActivity::class.java))

Вам просто нужно указать класс действий - CameraCaptureActivity::class.java

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