2013-10-06 10 views
3

Я пытаюсь создать экземпляр Progress Bar из основной операции и динамически добавить его в представление. Когда я делаю это, я получаю строку:Программный код Android Progress Bar

ProgressBar bar = new ProgressBar(this, null, android.R.attr.progressBarStyleHorizontal); 
LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); 
bar.setLayoutParams(params); 
bar.setId(mInt); 
LinearLayout layout = (LinearLayout) findViewById(R.id.layout); 
layout.addView(bar); 

Я начал новый проект, который включает в себя только код выше, и прогресс бар отображается правильно.

Если я добавлю следующие строки к вышеуказанному коду, экран будет пустым на секунду, а затем отобразится половина полного бара. Я бы ожидал увидеть пустой бар на секунду, а затем он достигнет 50%.

try { 
    Thread.sleep(2000); 
} catch ...{ 
} 
bar.setProgress(50); 

Если я добавлю такой код, однако, панель и изменения отображаются правильно.

Button b = new Button(this); 
     b.setText("change bar"); 
     b.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       changeProg(); 
      } 
     }); 

public void changeProg() { 
     switch (state) { 
     case 0: bar.setProgress(100); state = 1; break; 

     case 1: bar.setProgress(127); state = 2; break; 

     case 2: bar.setProgress(33); state = 0; break; 
     } 
    } 

Если я пытаюсь автоматизировать процесс с петлей для вызова changeProg() каждый так часто, экран просто не остается пустым - нет виджетов на все дисплей, являются ли они описываются XML или про грамматический не делают никакой разницы.

У меня возникли проблемы с пониманием того, почему такое поведение существует.

ответ

-2

Вы пробовали посмотреть на этот сайт?

http://www.mkyong.com/android/android-progress-bar-example/

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

Надеется, что это помогает!

0

SetProgress совет:

Установите текущий прогресс в заданное значение. Не делает ничего, если индикатор выполнения находится в неопределенном режиме.

Таким образом, вы должны вызвать:

bar.setIndeterminate (ложь);

1

Похоже, вы вызываете Thread.sleep(2000) из потока пользовательского интерфейса, что вызывает проблему, даже создавая ANR. Попробуйте создать новый поток (отдельный поток), чтобы изменить значение прогресса.

Смотрите пример ниже:

https://stackoverflow.com/a/17758416/3922207

0
ProgressBar pdialog = new ProgressBar(context,null, android.R.attr.yourcustomstyle); 

и проверить apptheme в стиле