【问题标题】:Why AsyncTask doesn't work well?为什么 AsyncTask 不能正常工作?
【发布时间】: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


【解决方案1】:

尝试使用 ProgressDialog 而不是 ProgressBar,这可能会有所帮助:ProgressDialog in AsyncTask。我也遇到了困难,但是一旦我更改为 ProgressDialog,它的配置就相当简单了。否则,我怀疑您调用的方法 populateEventList() 不会花时间。尝试做多种方式,比如把东西放在doInBackGround的线程里面,多线程运行等等。

【讨论】:

  • 您好,感谢您的评论。正如你所说,我正在尝试 ProgressDialog,但我需要一点帮助。如果您不介意查看我的代码,请告诉我需要在onPostExecute() 中输入什么?
猜你喜欢
  • 2019-01-04
  • 2020-09-03
  • 2016-10-10
  • 2016-10-24
  • 2017-02-27
  • 2017-07-08
  • 2014-11-23
  • 2021-03-07
  • 2021-01-24
相关资源
最近更新 更多