2010-07-26 54 views
1

我在android中使用進度條,以便直到我的數據加載,用戶得到正確的反饋。 的欄中的代碼如下:使用進度條結束不填充列表視圖

final ProgressDialog myProgressDialog; 

myProgressDialog = ProgressDialog.show(ListingPage.this,"Please Wait", "Loading Date", true); 
new Thread() { 
    public void run() { 
     try{ 
     setSelected();      
     sleep(5000); 
     } catch (Exception e) { } 
     myProgressDialog.dismiss(); 
    } 
}.start(); 

的setSelected()方法被插入數據到一個數組列表,然後創建一個數組適配器,然後使用列表視圖,以顯示這些項目。

所以當我把setSelected()方法放在進度條中時,它顯示加載循環,但一旦加載完成。在listview中沒有顯示任何內容。但是,如果我取出進度條形碼(線程和運行方法),並且只調用setSelected()方法,則listview會成功聲明數據。 到目前爲止它的結論是進度條代碼正在做一些事情......所以想知道我是否錯過了要添加或取出代碼的內容。我需要展示進度條,因爲我正在閱讀來自在線來源的數據,這需要時間,這可能會讓用戶感到不舒服。

回答

1

問題可能是因爲您試圖從另一個線程更改Userinterface然後UI線程,這在Android中是不可能的。我建議嘗試使用Async Task。 Asynct Task爲您提供了在後臺線程中執行某些操作並在UI線程完成後將結果發佈到UI線程中的可能性。

爲此,我將在兩個方法中分離setSelected方法,一個獲取數據並創建Array和其他所有內容,另一個創建適配器並將結果發佈到列表中。

myProgressDialog = ProgressDialog.show(ListingPage.this,"Please Wait", "Loading Date", true); 

final Result[] results = new Result[](); 

new AsyncTask<Void, Void, Void>() { 

    //This is done in the background 
    protected Void doInBackground(Void... params) { 
     results = getResults(); 
     return null; 
    } 

    //This id done in the UI Thread 
    protected void onPostExecute(Long result) { 
     publishResults(); 
     myProgressDialog.dismiss(); 
    } 

    } 
}.execute(); 
+0

Janusz! 我使用U子告訴上面的方法,但是,搜索欄掛在加載代碼是: 新的AsyncTask <太虛,太虛,太虛>(){// 這是在保護無效doInBackground(虛空背景 做... params){ setSelected(); 返回null; } //此UI在UI中完成線程 保護無效onPostExecute(長結果){ populateList(data); myProgressDialog.dismiss(); } } .execute(); 我想這個線程是懸空..這是?? – kaibuki 2010-07-29 11:07:19

+0

對不起,我需要更多的代碼,然後在這裏真正發現一個錯誤。嘗試在原始問題中進行編輯 – Janusz 2010-07-29 12:27:09