Блесна Progressbar не вращается - PullRequest
2 голосов
/ 14 июня 2011

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

<Progressbar 
    android:id="@+id/xPBar"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    style="@android:style/Widget.ProgressBar.Inverse"/>

это код загрузки: при выполнении этого метода я показываю индикатор выполнения

    public void downloadAlerts() {
    mPBar.setVisibility(ProgressBar.VISIBLE);
    Runnable r = new Runnable() {

        @Override
        public void run() {
            if (checkNetworkStatus(getApplicationContext()) == true) {
                String alert = con.execute(ALERTS_URL
                        );
                AlertsParser parser = new AlertsParser();
                parser.parseJson(alert);
                startActivity(new Intent(getApplicationContext(), Alerts.class));
                onSuccessDownload();
            } else if (checkNetworkStatus(getApplicationContext()) == false) {
                onFailureDownload();
            }

        }
    };
    mHandler.post(r);

}

Спасибо ...

Ответы [ 2 ]

4 голосов
/ 14 июня 2011

Вы, вероятно, должны поместить его в AsyncTask .Если вы попытаетесь поместить индикатор выполнения в ваш основной поток пользовательского интерфейса, он не будет двигаться, если вы сделаете что-то еще в фоновом режиме, как объяснено здесь .

3 голосов
/ 14 июня 2011

Позвонив

mHandler.post (г) * +1004 *

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

Вы должны запустить либо AsyncTask, либо новый поток. Например, поместите в конце вашего Runnable r что-то вроде

Runnable r = new Runnable () {

   @Override
    public void run() {
        .......
        context.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                hideProgressOnSuccess_andShowData();
            }
        });
    }

}

и затем запустите свой Runnable r следующим образом:

новая тема (r) .start ();

С AsyncTask и использованием его onPreExecute и onPostExecute, конечно, он может быть более элегантным.

Поздравил, Dan

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