Отклонить диалог прогресса в Android - PullRequest
1 голос
/ 20 сентября 2010

В моем приложении для Android я играю видео, используя просмотр видео. Пока видео загружается, я показываю диалог прогресса.

В случаях, когда потоковая передача не поддерживается или при возникновении какой-либо ошибки, на экран выводится сообщение об ошибке. После щелчка по окну сообщения об ошибке диалоговое окно прогресса снова показывает сообщение и пытается загрузить.

Но я хотел бы закрыть этот диалог, если есть какие-либо сообщения об ошибках, и как только пользователь нажимает Ok и возвращается к видеопроигрывателю

, чтобы пользователь мог просмотреть следующее или предыдущее видео.

private ProgressDialog mProgressDialog;
Handler myUiHandler = new Handler();
         boolean m_prgisShowing = false;
         private static final int DIALOG_100 = 0;
        ProgressDialog mDialog2;

     mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                    public void onPrepared(MediaPlayer mp) {
                        Log.i("Manju", "OnPrepared");
                        myUiHandler.post(myDilgDismis);
                        mVideoView.start();



        protected Dialog onCreateDialog(int id) {
            switch (id) {
            case DIALOG_100: {
                mDialog2 = new ProgressDialog(this);
                mDialog2.setMessage("buffering...");
                mDialog2.setIndeterminate(true);
                mDialog2.setCancelable(true);

                return mDialog2;
            }
            }
            return null;
        }



        Runnable myDilgShow = new Runnable() {
            public void run() {
                show_My_Dialog();
            }
        };
        Runnable myDilgDismis = new Runnable() {
            public void run() {
                dismiss_My_Dialog();
            }
        };

        public void show_My_Dialog() {
            m_prgisShowing = true;
            showDialog(DIALOG_100);
        }

        public void dismiss_My_Dialog() {
            if (m_prgisShowing) {

                try {
                    if (null != mDialog2) {
                        mDialog2.dismiss();
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                    m_prgisShowing = false;
                }
            }
            m_prgisShowing = false;
        }

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

Заранее спасибо

1 Ответ

1 голос
/ 20 сентября 2010

Я предполагаю, что вы используете AsyncTask для потоков, в данном случае для потоковой передачи или загрузки. Затем вы реализовали

onProgressUpdate 

функция. В этой функции вы обновляете диалог прогресса, чтобы показать текущее состояние потоковой передачи. Чтобы закрыть диалоговое окно прогресса, вы должны установить его видимость на false или полностью удалить его из макета. В onProgressUpdate вам нужен оператор if или что-то подобное, чтобы перехватить ошибку и закрыть диалоговое окно.

EDIT:

Код показывает, что вы используете работающий интерфейс для реализации потоков, это хорошо для базовой разработки Java. Но у Android SDK есть решение, специально разработанное для Android, которое называется async task . Рекомендуется использовать его.

например. Вы можете добавить приватный класс в свой основной Java-файл, где находится метод oncreate.

private class MediaPlayer extends AsyncTask<Params, Progress, Result> {

}

а. Params: тип параметров, отправляемых заданию при выполнении.

б. Прогресс: тип единиц прогресса, опубликованных во время фонового вычисления.

с. Результат: тип результата вычисления фона.

Каждая асинхронная задача реализует следующие методы. 4 шага, через которые пройдет AsyncTask:

а. onPreExecute () - немедленно вызывается в потоке пользовательского интерфейса

-> Вызывается до начала фонового вычисления

-> Выполнить некоторые настройки (например, отобразить диалоговое окно хода выполнения)

б. doInBackground (Params ...) - вызывается в фоновом потоке

-> Вызывается сразу после onPreExecute ()

-> Выполнять вычисления в фоновом потоке, которые могут занять много времени.

-> Использовать publishProgress (Progress ...) для запуска процесса обновления пользовательского интерфейса

-> Ход выполнения будет передан в onProgressUpdate (Progress ...)

с. onProgressUpdate (Progress ...) - вызывается в потоке пользовательского интерфейса

-> Процесс обновления

д. onPostExecute (Результат) - вызывается в потоке пользовательского интерфейса

-> Вызывается после завершения вычисления фона

-> Результат будет передан из doInBackground (Params ...)

Как запустить AsyncTask?

new MyTask().execute(param1, param2, param3);

Это небольшой обзор. Я настоятельно рекомендую вам прочитать документ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...