Исправить Невозможно выполнить это действие после onSaveInstanceState после onActivityResult без проблем с пользовательским интерфейсом

Я заметил некоторые сбои в onActivityResult после получения результатов активности, которая была запущена в стороннем SDK. Я лично использую singleActivity с несколькими фрагментами и не сталкивался с этой проблемой. Возникает вопрос: как мне безопасно выполнить транзакцию фрагмента после onActivityResult?

После некоторого тестирования мы обнаружили, что наша ручная смена локали не работает после потери состояния, вот наш метод:

// here I provide specific locale

private fun setupLocale(locale: String) {
            val config = this.resources.configuration
            val locale = Locale(locale)
            Locale.setDefault(locale)
            config.locale = locale
            this.baseContext.resources.updateConfiguration(config,
                    this.baseContext.resources.displayMetrics)

    }

Я вызываю этот метод в onCreate, но он не запускается после потери состояния...

Кажется, что commitAllowingStateLoss() создает странные ошибки, как указано в документации... Как мне исправить эту проблему? Два основных вопроса:

  1. Как мне безопасно выполнить транзакцию фрагмента в onActivityResult без commitAllowingStateLoss()?

  2. Если это невозможно, как мне восстановить свое состояние после потери состояния в соответствии с шаблоном MVVM и убедиться, что пользовательский интерфейс находится под контролем? Выживет ли моя виртуальная машина? Если нет, следует ли передать customLocale в пакете и получить его в действии?

ИЗМЕНИТЬ

Возможно, моя проблема заключалась в том, что у меня не было этой строки в моем onActivityResult?:

super.onActivityResult(requestCode, resultCode, data)

Я нашел аналогичный вопрос в stackOverflow:

Вот как я уведомляю свою виртуальную машину из onActivityResult:

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
        if (resultCode == Activity.RESULT_OK) {
            if (requestCode == REQUEST_CODE_VERIFICATION) {
                viewModel.openFragmentNr3(true)
            }
        }
    }

//VM
  val addFragmentNr3 = SingleLiveEvent<Boolean>()

  fun openFragmentNr3(shouldOpen:Boolean)
    {
        addFragmentNr3.value = shouldOpen
    }

Затем я регулярно наблюдаю это в своей единственной Activity :)


person Viktor Vostrikov    schedule 01.08.2019    source источник
comment
Можете ли вы включить свой метод onActivityResult()?   -  person ianhanniballake    schedule 02.08.2019
comment
Я отредактировал свой вопрос и указал возможную причину проблемы :)   -  person Viktor Vostrikov    schedule 02.08.2019
comment
Вы должны позвонить super.onActivityResult().   -  person ianhanniballake    schedule 02.08.2019