2015-08-30 45 views
0

我需要我的ListView在某些情況下延遲更新,所以我試圖用來做到這一點,而。它看起來是這樣的:android - 異步更新ListView數據

int m=2; 
    while (bigList.get(m).type !=1) { 
     final int n=m; 
     new Handler().postDelayed(new Runnable(){ 
      @Override 
      public void run() { 
       smallList.add(n, bigList.get(n)); 
       adapter.notifyDataSetChanged(); 
      } 
     }, bigList.get(n).delay); 
     m++; 
    } 

但它只是推遲了第一次,然後更新一次全部,但我認爲延遲將是貫穿所有步驟。我試圖殺死/關閉/敲定(只有最後一個存在)匿名Runnable,但沒有效果。如何做到這一點延遲每一步?也許使用一些其他的結構或什麼是最好的方法?

回答

0

我還沒有嘗試過這一點,但我猜測問題是您的處理程序是主線程,並且您的代碼發佈到該處理程序也在主線程上。

因此,'while'循環阻塞線程,並且消息正在Handler的隊列中累積。然後,當循環退出時,所有的消息都被處理。

爲了得到您所期望的,您可能需要在後臺線程上運行'while'循環,並仍將郵件發佈到主線程。

有關如何操作的信息,請參閱Running code in main thread from another thread

+0

感謝您的建議,我會盡力讓自己清楚如何與您的鏈接。但是我發現確切的問題 - postDelayed比「while」中的其他東西更重,所以它首先添加所有臨時項目,並且只有在替換它之後(因此,m ++比Handler部分早發生) –