我有 2个按钮以及进度条。 现在我想从0到100计数并用计数器更新进度条。不幸的是,这个计数太快了,我不会看到进展(我只能看到进度条在'毫秒'内从0跳到100。)。
这是我到目前为止所尝试的,但是事情和以前一样。
我点击按钮启动计数器,应用程序变得无法响应(我在mainThread中计算,这样就OKAY了(这正是我想在这里完成的) (!)))并在不久之后将进度条设置为100 。 之间没有任何内容。
现在,如果你能指引我走向正确的方向,那将非常感激! :)
public class MainActivity extends ActionBarActivity {
public String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
addButtonListeners();
}
public void addButtonListeners() {
Button firstButton, secondButton;
final ProgressBar pgBar;
firstButton = (Button) findViewById(R.id.first_button);
secondButton = (Button) findViewById(R.id.second_button);
pgBar = (ProgressBar) findViewById(R.id.progressBar);
firstButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d(TAG, "First Button was pressed.");
for (int i = 0; i <= 100; i++) {
countProgBarUp(pgBar, i);
}
}
});
secondButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d(TAG, "Second Button was pressed.");
}
});
}
public void countProgBarUp(ProgressBar pgBar, int counter) {
try {
Thread.sleep(100);
pgBar.setProgress(counter);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
...
}
答案 0 :(得分:1)
UI变得无法响应,因为您在主线程上执行此操作并正在休眠。如果您没有从onClick()
返回,则主线程无法处理UI更改,例如显示您的新进度。只有主线程可以更新UI组件并绘制它们。因此,它通常被称为UI线程。
您可以尝试创建Runnable
,将进度条更新为新计数。创建一个绑定到UI线程的Handler
,并为postDelayed()
调用Handler
并为其提供Runnable
的实例。然后只要你没有达到最大进度,Runnable
就会再次发布。