我有一个搜索功能(使用网络服务),需要一段时间才能将数据加载到我的虚增布局。我想显示一个ProgressBar
,直到从Web服务获取数据。这是一个很小的时间间隔,因此我不会使用ProgressDialog
。我已经浏览了很多帖子和 dev 指南,但我无法找到在我的应用中使用它的方法。我的布局中有一个Spinner
。一旦我从微调器下拉列表中选择了一个项目,我就将字符串传递给搜索函数,该函数将获取数据并将数据加载到膨胀的布局中。
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
Selection = spinner.getSelectedItem().toString();
search(Selection);
}
我按照 dev 指南中的说明创建了一个ProgressBar处理程序。
private ProgressBar mProgress = new ProgressBar(SearchActivity.this, null, android.R.attr.progressBarStyleSmall);
private int mProgressStatus = 0;
private Handler mHandler = new Handler();
并说这是一个用于显示ProgressBar
new Thread(new Runnable() {
public void run() {
while (mProgressStatus < 100) {
mProgressStatus = doWork();
// Update the progress bar
mHandler.post(new Runnable() {
public void run() {
mProgress.setProgress(mProgressStatus);
}
});
}
}
}).start();
如何跟踪搜索功能的进度以显示ProgressBar
?
感谢您阅读
答案 0 :(得分:2)
您应该使用AsyncTask而不是线程。通过asyncTask,您可以在UI线程上运行preexecute
,postexecute
和publishprogress
,并在后台运行doInBackground
。 google上有很多内容。
试试这个one。
答案 1 :(得分:1)
使用AsyncTask
代替线程。它更容易使用,并提供内置机制以通知进度更新。
请看这个问题以获得完整的样本:
Download a file with Android, and showing the progress in a ProgressDialog