正在执行功能时刷新屏幕

时间:2012-03-12 02:25:06

标签: android

我有一个简单的函数,从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);
}

我似乎无法弄清楚如何刷新屏幕。我四处寻找并建议使用线程和处理程序,我之前从未使用过线程,也不知道如何更改我的函数以适应线程使用。或者,如果有一种更简单的方法,不使用任何线程,只是调用某种刷新功能,我也会很感激。任何帮助或指导都将非常受欢迎。提前致谢

1 个答案:

答案 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
 }

}