【问题标题】:Need to create a thread for spinner?需要为微调器创建一个线程吗?
【发布时间】:2013-04-14 09:01:59
【问题描述】:

我的代码在这里

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);
}

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

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

显然,程序正忙于加载其他在完成之前无法显示微调器的内容。

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

【问题讨论】:

标签: android multithreading progressdialog


【解决方案1】:

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

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

在你的主线程中:

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

在你的新帖子中:

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

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

【讨论】:

    【解决方案2】:

    你应该使用AsyncTask

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-30
      • 2018-12-30
      • 2014-08-05
      • 2022-07-24
      • 2012-02-02
      • 2020-09-13
      相关资源
      最近更新 更多