Отображать диалоговое окно загрузки во время выполнения метода в Android?

У меня есть настройка метода, для запуска которой требуется около 3-5 секунд (потому что она делает что-то онлайн), и я хотел бы показать диалоговое окно загрузки, но я не могу понять, как это сделать, я попытался запустить диалоговое окно загрузки, прежде чем я позвонил затем метод попытался отклонить его сразу после этого:

dialog.show();
myMethod();
dialog.cancel();

Но это не сработало, есть ли у кого-нибудь предложения?


person William L.    schedule 14.06.2012    source источник


Ответы (2)


AsyncTask — мой любимый, но вы также можете использовать обработчики :)

Потратьте свое время на чтение этого прекрасного блога.

Фрагмент ниже поможет вам.

    package org.sample;

    import android.app.Activity;
    import android.app.ProgressDialog;
    import android.os.Bundle;
    import android.os.Handler;

    public class Hello extends Activity {

        private Handler handler;
        private ProgressDialog dialog;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            dialog = new ProgressDialog(this);
            dialog.setMessage("Please Wait!!");
            dialog.setCancelable(false);
            dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
            dialog.show();

            new Thread() {
                public void run() {
                    // Do operation here.
                    // ...
                    // ...
                    // and then mark handler to notify to main thread 
                    // to  remove  progressbar
                    //
                    // handler.sendEmptyMessage(0);
                    //
                    // Or if you want to access UI elements here then
                    //
                    // runOnUiThread(new Runnable() {
                    //
                    //     public void run() {
                    //         Now here you can interact 
                    //         with ui elemements.
                    //
                    //     }
                    // });
                }
            }.start();

            handler = new Handler() {
                public void handleMessage(android.os.Message msg) {
                    dialog.dismiss();
                };
            };
        }
    }
person Vipul    schedule 14.06.2012
comment
Я пытался использовать это раньше, но я продолжаю получать Только исходный поток, создавший иерархию представлений, может касаться своих представлений. ошибка. И я понятия не имею, что это значит... лол... есть предложения? - person William L.; 14.06.2012
comment
вы пытаетесь получить доступ к элементам пользовательского интерфейса из потока. Вот почему вы получаете эту ошибку. - person Vipul; 14.06.2012
comment
Большое спасибо! Теперь он работает отлично :) В итоге я использовал run(), как и раньше, для выполнения моего метода, но затем использовал runOnUiThread для изменения представлений, которые необходимо было изменить! :D - person William L.; 14.06.2012

Выполнение длительной задачи в потоке пользовательского интерфейса — это «нет-нет». Используйте AsyncTask для запуска длительных задач в фоновом режиме и обновления пользовательского интерфейса. когда он будет завершен.

person Rajesh    schedule 14.06.2012