2013-04-14 40 views
-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); 
} 

當單擊列表中,我想說明一個微調指示載荷,而程序加載一些其他的東西,然後關閉它而轉向另一項活動。

但是當你點擊列表時,它只是加載內容,而不顯示微調,然後在加載所有東西后,微調突然閃爍,然後轉向另一個視圖。

顯然,程序忙於加載其他東西,無法顯示微調框直到完成。

如何在程序正確計算其他東西時顯示微調框?

+0

請清除您的Android概念。 Spinner是用於顯示元素列表的視圖。 https://developer.android.com/guide/topics/ui/controls/spinner.html –

回答

1

正在發生的事情是,你正在做在主線程(UI線程)耗時的工作(加載數據)。在加載數據時,界面被凍結,無法繪製或交互。

要解決這個問題,您必須將耗時的任務移動到另一個線程。要做到這一點,你可以使用AsyncTask,如果你願意,也可以使用普通的Java線程。

在你的主線程:

  1. 顯示微調
  2. 啓動新的線程

在你新的線程:

  1. 做的工作
  2. 隱藏spinner

您可以在線找到許多AsyncTask教程。