-1

我的代码在这里

protected void onListItemClick(ListView l, View v, int position, long id) {
    super.onListItemClick(l, v, position, id);
    progress = new ProgressDialog(this);
    progress.setTitle("Loading");
    progress.setMessage("Wait while loading...");
    progress.show();
    Log.i("Spinner", "Starts");
    String trip_id = trips.get(position);
    FeedParser parser = FeedParserFactory.getParser(ParserType.ANDROID_SAX);
    stopTimes = parser.parseStopTime().get(trip_id);
    Collections.sort(stopTimes,StopTime.StopTimeComparator);
    stops = parser.parseStop();
    List<String> stopList = new ArrayList<String>(stopTimes.size());
    for (StopTime st: stopTimes) {
        stopList.add(stops.get(st.getStop_id()).getStop_name() + st.getDeparture_time().toString());
    }
    Log.i("Spinner", "Dismissed");
//      progress.dismiss();
    Intent viewStops = new Intent(this, StopActivity.class);
    viewStops.putStringArrayListExtra("stops_to_parse", (ArrayList<String>) stopList);
    this.startActivity(viewStops);
}

单击列表时,我想在程序加载其他内容时显示一个指示加载的微调器,然后将其关闭并转向另一个活动。

但是它的作用是当你点击列表时,它只是加载东西,不显示微调器,然后在加载完所有东西后,微调器突然闪烁然后转向另一个视图。

显然,该程序正忙于加载其他无法显示微调器的东西,直到它完成。

如何在程序正确计算其他内容时显示微调器?

4

2 回答 2

1

正在发生的事情是您正在主线程(UI 线程)中进行耗时的工作(加载数据)。在加载数据时,界面被冻结并且无法绘制或交互。

要解决这个问题,您必须将耗时的任务转移到另一个线程。为此,您可以使用AsyncTask,或者如果您愿意,可以使用纯 Java 线程。

在您的主线程中:

  1. 显示微调器
  2. 启动新线程

在您的新线程中:

  1. 做好工作
  2. 隐藏微调器

您可以在线找到许多 AsyncTask 教程。

于 2013-04-14T10:24:43.060 回答
0

您可能应该使用AsyncTask

于 2013-04-14T09:10:22.863 回答