Я заметил некоторые сбои в 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() создает странные ошибки, как указано в документации... Как мне исправить эту проблему? Два основных вопроса:
Как мне безопасно выполнить транзакцию фрагмента в onActivityResult без commitAllowingStateLoss()?
Если это невозможно, как мне восстановить свое состояние после потери состояния в соответствии с шаблоном 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 :)
onActivityResult()
? - person ianhanniballake   schedule 02.08.2019super.onActivityResult()
. - person ianhanniballake   schedule 02.08.2019