我对android中的进度条有疑问。我还没有实现它,但由于时间不足,我想确保当我实施时,我更清楚将要发生的事情以及为什么......
dialog = new ProgressDialog(this);
dialog.setCancelable(true);
dialog.setMessage("Loading...");
// set the progress to be horizontal
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
// reset the bar to the default value of 0
dialog.setProgress(0);
// get the maximum value
EditText max = (EditText) findViewById(R.id.maximum);
// convert the text value to a integer
int maximum = Integer.parseInt(max.getText().toString());
// set the maximum value
dialog.setMax(maximum);
// display the progressbar
dialog.show();
// create a thread for updating the progress bar
Thread background = new Thread (new Runnable() {
public void run() {
try {
// enter the code to be run while displaying the progressbar.
//
// This example is just going to increment the progress bar:
// So keep running until the progress value reaches maximum value
while (dialog.getProgress()<= dialog.getMax()) {
// wait 500ms between each update
Thread.sleep(500);
// active the update handler
progressHandler.sendMessage(progressHandler.obtainMessage());
}
} catch (java.lang.InterruptedException e) {
// if something fails do something smart
}
}
});
// start the background thread
background.start();
}
// handler for the background updating
Handler progressHandler = new Handler() {
public void handleMessage(Message msg) {
dialog.incrementProgressBy(increment);
}
};
这是我从某个地方采取的上述代码...因为这段代码说我必须保持我的实际代码在下面尝试以保持进度条运行..我的疑问是我的代码是一个非常冗长的由嵌套组成for循环(使用所有这些位和字节解析整个文件)..如果我在该部分的那一部分保持冗长的过程,它如何更新进度条直到它完成任务? 我错过了一些概念吗?请解释我如何让我的流程继续运行并更新进度条?
答案 0 :(得分:1)
您应该使用AsynTask并在其onPreExecute()
方法中显示您的ProgreesBar,并在其onPostExecute()
方法中关闭ProgressBar。在doInBackground()
方法中完成所有正在加载的内容。此外,要使用onProgressUpdate()
这会有所帮助:http://developer.android.com/reference/android/os/AsyncTask.html
答案 1 :(得分:0)
我认为你缺少的概念是,如果你想要多个事情(在进度条中显示进度并做一些实际工作),你需要使用多个线程。这就是为什么你需要创建一个单独的线程来完成实际的工作。
即使您的代码确实很长,也可以尝试对其进行重新分解,将其拆分为新的类和方法。