Пользовательский интерфейс блокируется при вызове метода viewmodel - PullRequest
0 голосов
/ 05 апреля 2019

У меня проблема с тем, что всякий раз, когда я вызываю этот метод ViewModel, я блокирую пользовательский интерфейс, и строка ui_registration_done_progressBar.visibility = View.VISIBLE не выполняется, даже если отладчик показывает, что обычно вызывается

sendRegistrationметод имеет дело со многими вещами и требует некоторого времени для завершения, как только он закончится, пользовательский интерфейс разблокирован и ui_registration_done_progressBar.visibility = View.VISIBLE выполняется

override fun onClick(v: View?) {
    when(v?.id){
        R.id.ui_registration_done_next ->{
            ui_registration_done_progressBar.visibility = View.VISIBLE
            sendRegistrationViewModel.sendRegistration()
        }

    }
}

Я попытался вызвать более быстрые методы из ViewModel в этомесли проблема не возникает

Ответы [ 2 ]

1 голос
/ 05 апреля 2019

Я бы порекомендовал убрать долгосрочную задачу из потока пользовательского интерфейса.Вы можете добавить использование запускаемой или асинхронной задачи.

например:

    Runnable runnable = new Runnable() {
         @Override
         public void run() {
             sendRegistrationViewModel.sendRegistration();
         }
    };

    AsyncTask.execute(runnable);
0 голосов
/ 05 апреля 2019

Вы можете использовать doAsync для запуска задачи в фоновом потоке

import org.jetbrains.anko.doAsync
...
...

    override fun onClick(v: View?) {
        when(v?.id){
            R.id.ui_registration_done_next ->{

                doAsync {
                 ui_registration_done_progressBar.visibility = View.VISIBLE
                 sendRegistrationViewModel.sendRegistration()
                }

            }

        }

}

, добавив зависимость в ваш файл build.gradle:

dependencies {
    ...
    ...  
    //* To use doAsync instead of AsyncTask
    implementation "org.jetbrains.anko:anko-commons:0.10.4"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...