2013-10-06 26 views
3

我试图从主Activity实例化Progress Bar并将其动态添加到视图中。当我这样做,我得到一个酒吧:编程的Android进度条风格

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描述或Pro语法上没有什么区别。

我无法理解此行为存在的原因。

回答

0

SetProgress尖端:

设置当前进展到规定值。如果进度栏处于不确定模式,则不执行任何操作。

所以你要拨打:

bar.setIndeterminate(假);

1

看来你从UI线程调用Thread.sleep(2000),这会导致问题,甚至创建ANR。尝试创建一个新线程(单独的线程)来更改进度值。

请参见下面的例子:

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

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

,并检查您apptheme风格