【发布时间】:2016-07-16 02:41:34
【问题描述】:
我正在尝试加载 ListView,我希望在加载 ListView 时,会显示一个进度条。
首先,这是我的代码(后面会有结果说明):
class MyTask extends AsyncTask<String,Integer,String>
{
final ListView listView = (ListView)findViewById(R.id.listView1);
final ProgressBar pb=(ProgressBar)findViewById(R.id.progressBar);
@Override
protected void onPreExecute()
{
super.onPreExecute();
pb.setVisibility(View.VISIBLE);
listView.setVisibility(View.INVISIBLE);
}
@Override
protected String doInBackground(String...strings)
{
populateEventList();
return "done";
}
@Override
protected void onProgressUpdate(Integer...values)
{
super.onProgressUpdate(values);
pb.setProgress(values[0]);
pb.setMax(values[1]);
}
@Override
protected void onPostExecute(String s)
{
super.onPostExecute(s);
listView.setVisibility(View.VISIBLE);
pb.setVisibility(View.GONE);
}
}
结果是进度条随时都没有显示。列表视图已加载,但未显示进度条。
如果我要删除最后一行 pb.setVisibility(View.GONE); ,进度线会显示,但加载 ListView 后它不会消失。
我的代码有什么问题?
【问题讨论】:
-
访问此链接并查看
AsyncTask的工作原理。 stackoverflow.com/questions/18898039/using-asynctask -
你怎么称呼你的
AsyncTask?你没有使用.get(),是吗? -
@codeMagic 我这样称呼:
new MyTask().execute(); -
“populateEventList()”在做什么?您可以编辑以显示该方法吗?也许这正在快速执行,所以看起来您的
ProgressBar没有显示。此外,您没有将任何内容传递给onProgressUpdate(),因此不会更新这些值。 -
加载一个列表视图可能不会花费很多时间,除非它有数千个项目,所以它可能显示得如此之快以至于你没有注意到它。您需要调用
publishProgress()来实际更新 ProgressBar 并使其移动。
标签: java android listview android-asynctask progress-bar