Пользовательский диалог — Вход — я хочу «модальный» индикатор выполнения

#android

#Android

Вопрос:

У меня есть пользовательский диалог для входа в мое приложение. Я также добавил к нему progressbar и сделал невидимым. Когда пользователь нажимает кнопку, я вызываю AsyncTask для обработки http-входа. Я управляю progressbar из AsyncTask. Все выглядит хорошо, но во время выполнения AsyncTask диалоговое окно полностью реагирует. Я могу изменять поля, я могу нажимать кнопки и т.д. Я вижу 3 варианта:

  1. Перед запуском asynctask я отключу все элементы управления. Но как я узнаю, когда закончу? Могу ли я использовать обратный вызов?

  2. Сделайте окно входа в систему активным и покажите диалоговое окно прогресса.

  3. ?

Пожалуйста, дайте мне знать, как правильно справиться с этим сценарием

вот асинхронная задача. Я пытаюсь сделать его универсальным, где я передаю URL и тело и возвращаю http-ответ:

 private class RESTService extends AsyncTask<String, Integer, String>
    {
        //TODO: Add text to progress bar and add custom artwork
        ProgressBar progress;
        Dialog dialog;
        Activity activity;

        public RESTService(ProgressBar p, Dialog d, Activity a)
        {
            progress = p;
        }
        @Override
        protected String doInBackground(String... stuff)
        {
            String url = stuff[0];
            String post = stuff[1];

            try
            {
                Thread.sleep(15000);
            } catch (InterruptedException e)
            {
                e.printStackTrace();
            }

            return "done";
        }

        @Override
        protected void onPreExecute()
        {
            super.onPreExecute();

            if (dialog != null)
            {

            }

            if (progress != null)
            {
                progress.setVisibility(View.VISIBLE);

            }
        }

        @Override
        protected void onPostExecute(String s)
        {
            super.onPostExecute(s);

            if (progress != null)
            {
                progress.setVisibility(View.GONE);
            }
        }
    }
  

Ответ №1:

Что я в итоге сделал — запустил AlertDialog, создал интерфейс для прослушивателя AsyncTask и вызвал родительского абонента по завершении задачи.