2013-05-06 231 views
0

所以,我正在做這個應用程序,其中有一個ListView列出了從WebService和數據庫中獲取的項目。在這個列表中,當用戶接近當前列表的末尾時,我需要拉動刷新並加載更多itens。當接近結束時,拉動刷新和加載更加有效。但是,問題是添加項目時,無需將項目添加到列表的頂部或末尾,它只是刷新整個列表,加載新項目並排除舊項目。那麼,我怎樣才能將一個項目添加到一個ListView的頂部或頂部?將項添加到ListView的末尾

這裏是一些代碼,以幫助:

@Override 
    protected void onPostExecute(Boolean result) { 
     Log.d("Async 4", "post"); 

     SampleAdapter adapter = new SampleAdapter(getActivity()); 


     if (dialog.isShowing()) { 
      dialog.dismiss(); 
     } 

     for (int i = 0; i < 1; i++) { 
      for (int w = 0; w < 1; w++) { 
       for (int j = 0; j < 1; j++) { 
        int cont = 10; 
        cont++; 
        for (int k = 0; k < cont; k++) { 
         adapter.add(new SampleItem("" + title[k],"" + categoria_[i],"" + data_publicao[i], 1)); 
         // Log.d("", "" + title[k]); 
         setListAdapter(adapter); 
        } 
       } 
      } 
     } 
     if (dialog.isShowing()) { 
      dialog.dismiss(); 
     } 
     pullToRefreshListView.onRefreshComplete(); 
    } 

} 

這段代碼是我嘗試添加新的項目。我只是調用加載數據的異步任務(來自WebService /數據庫),onPostExecute用於添加更新的項目。

如果需要更多來自我的項目的代碼,只需要問一下,我會放更多。提前致謝。

+0

把它看成兩件獨立的事情:項目列表和連接到ListView的適配器。您在新數據到達時更新項目列表,然後使用新編輯的列表更新適配器。您使用的適配器似乎已將數據打包在其中。在這種情況下,你會失去對列表的一些控制,比如列表中add()放置新項目的位置。 – 2013-05-06 14:38:05

回答

2

您的問題是,每當有更多項目受到影響時,您正在重新創建適配器。

adapter = new SampleAdapter(getActivity()); 
setListAdapter(adapter); 

將適配器的創建移動到您的活動的onCreate方法,並使其成爲活動類的字段。

然後,而不是在for循環再次設置適配器

只是通知適配器後的一切都已經加入後循環;

adapter.notifyDataSetChanged() 
+0

是的,它做到了。這是我的第一個有很多活動和片段的大應用,它很難發現這樣的錯誤。非常感謝! – Carlos 2013-05-06 14:57:45

+0

歡迎和祝你好運:) – 2013-05-06 14:58:18