Обратный отсчет ProgressBar с обработчиками в приложении для Android - PullRequest
3 голосов
/ 03 января 2012

Сначала я хочу сказать, что я часто использовал Google, чтобы найти индикатор выполнения, который заполняется сам по прошествии времени.Все результаты, которые я нашел где либо с нитью , либо с Asynctask .Будучи новичком в Android, я подумал, что это проще сделать с помощью дополнительного обработчика , который обрабатывает обновления индикатора выполнения.

Однако я не нашел никого, кто бы делал это по-своему.Может ли это нарушать правила Android?Например, могу ли я использовать несколько обработчиков одновременно?

Мой код выглядит так:

public void restarttimebar()
{
    stoptimebar();
    for(int i=1;i<12;i++)
    {
    Message msg = timebarhandler.obtainMessage(0,i,0);
    timebarhandler.sendMessageDelayed(msg, i*250);
    }

};

public void stoptimebar()
{
    timebarhandler.removeMessages(0);
    Message msg = timebarhandler.obtainMessage(0,0,0);
    timebarhandler.sendMessage(msg);
};

Handler timebarhandler = new Handler()
{
    @Override
    public void handleMessage(Message msg)
    {
        ProgressBar progressbar = (ProgressBar)findViewById(R.id.timebar);
        if (msg.arg1 == 0)
        {
            progressbar.setProgress(0);
        }
        if (msg.arg1 > 0)
        {
            progressbar.setProgress(msg.arg1*9);
        }
    }
};

Теперь можно вызвать restarttimebar ();(пере) запустить индикатор выполнения.Он будет заполняться в течение 3 секунд с приращениями каждые 0,25 секунды.Любые замечания с благодарностью !!

РЕДАКТИРОВАТЬ: Также добавлен stoptimebar ();просто остановить индикатор выполнения.Кроме того, стандартный размер индикатора выполнения равен 100. Поэтому я просто делаю двенадцать обновлений раз 9. Это почти 100;) В моем приложении полоса не обязательно должна быть ТОЧНОЙ.

Ответы [ 2 ]

0 голосов
/ 08 января 2012

Полагаю, мой метод обновления индикатора выполнения выглядит правильным.Так что для тех, кто гуглит и имеет такой же вопрос: используйте код в вопросе!

0 голосов
/ 05 января 2012

Насколько я знаю, потоки, которые вы создаете, и Asynctasks (Non-UI-Threads) не должны касаться таких элементов пользовательского интерфейса, как ваш индикатор выполнения. Если вам нужно, чтобы ваша задача связывалась с индикатором выполнения, используйте Asynctask и убедитесь, что действия, связанные с пользовательским интерфейсом, выполняются в onPostExecute (). Этот метод также будет вызываться основным потоком пользовательского интерфейса.

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