Почему функция navigateUp() заставляет ViewModel не соблюдать одно из состояний WorkInfo

#android #kotlin #viewmodel

Вопрос:

У меня есть 2 действия A и B. Действие B возвращает некоторые данные в действие A, которое используется для создания a OneTimeWorkRequest , чтобы сделать что-то еще. Я использую ViewModel для наблюдения за изменениями в состоянии WorkInfo для этого запроса. Например:

Активность.кт

   override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    myViewModel =
        viewModel<MyViewModel>().apply {
          observe(requestWorkInfo) {
            println(it.state)
            // expects to print: ENQUEUED, RUNNING, SUCCEEDED
          }
        }
 

Фрагмент в действии A должен navigateUp() вернуться к предыдущему фрагменту после того, как он получит данные из Действия B и создаст запрос. Например:

Мой фрагмент.кт

   override fun onActivityResult(requestCode: Int, resultCode: Int, intent: Intent?) {
    myViewModel.createOneTimeRequest(intent)
    this.findNavController().navigateUp()
  }

 

Проблема, с которой я сталкиваюсь, заключается в том, что В ОЧЕРЕДИ не печатается, когда я это делаю, — печатаются только ЗАПУЩЕННЫЕ и УСПЕШНЫЕ. Если я удалю this.findNavController().navigateUp() , все три состояния будут напечатаны, как и ожидалось. Мой вопрос в том, почему в ОЧЕРЕДИ не наблюдается, когда я navigateUp() после создания запроса? Существует ли основная проблема параллелизма, связанная с этим? Любое понимание будет оценено по достоинству.

Комментарии:

1. Возможно, вы не используете общую модель представления во фрагменте

2. Я. У меня есть только одна модель просмотра.