我有一个简单的函数,从0到5000计数,并用这些数字进行时髦的数学计算,我想显示进度条显示它当前正在计数的位置(每次迭代大约需要1秒)。
我的ProgressBar如下
<TableRow
android:visibility="gone"
android:id="@+id/progress_bar_row" >
<ProgressBar
android:id="@+id/progress_bar"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="wrap_content"
android:layout_span="2"
android:layout_height="wrap_content" />
</TableRow>
当用户按下按钮时,我的函数启动,它使行可见,我想在每次迭代时刷新ProgressBar。我的功能如下
private void find_number(View v)
{
String response = "";
TextView answer = (TextView)findViewById(R.id.answer);
TableRow progress_bar_row = (TableRow)findViewById(R.id.progress_bar_row);
ProgressBar progress_bar = (ProgressBar)findViewById(R.id.progress_bar);
progress_bar.setProgress(0);
progress_bar.setMax(5000);
progress_bar_row.setVisibility(View.VISIBLE);
answer.setText("");
for(int i = 0; i <= 5000; i++)
{
progress_bar.setProgress(i);
// a lot of heavy math is being performed here and answer is stored inside response string
}
//progress_bar.dismiss();
progress_bar_row.setVisibility(View.GONE);
answer.append(response);
}
我似乎无法弄清楚如何刷新屏幕。我四处寻找并建议使用线程和处理程序,我之前从未使用过线程,也不知道如何更改我的函数以适应线程使用。或者,如果有一种更简单的方法,不使用任何线程,只是调用某种刷新功能,我也会很感激。任何帮助或指导都将非常受欢迎。提前致谢
答案 0 :(得分:2)
您应该使用AsyncTask来解决此问题。
private class YourTask extends AsyncTask<String, Integer, Long> {
protected Long doInBackground(String... strings) {
for(int i = 0; i <= 5000; i++)
{
// your code here
publishProgress((int) ((i / (float) 5000) * 100));
}
return i;
}
protected void onProgressUpdate(Integer... progress) {
progress_bar.setProgress(progress);
}
protected void onPostExecute(Long result) {
//Do something after this task finish
}
}