2012-03-20 17 views
0

我試圖添加項目到適配器,因爲用戶滾動到列表的底部。我能夠做到這一點,但是我想將新項目添加到適配器並保留已經存在的項目,但是現在原始項目被刪除,只有新項目可見。有關我如何實現這一目標的任何想法?android notifyDataSetChanged()刪除列表中的原始數據

這是我的代碼看起來像ATM:

public void onScroll(AbsListView view, int firstVisibleItem, 
     int visibleItemCount, int totalItemCount) { 

     if (loading) {  
      if (totalItemCount > previousTotal) { 
       previousTotal = totalItemCount; 
       loading = false; 
       previousTotal = totalItemCount; 
       currentPage++; 
      } 
     } 
     if (!loading 
       && ((firstVisibleItem + visibleItemCount) >= totalItemCount)) { 
      if (fragmentMode == 5) { 
       ActiveUser.getInstance().FetchVidPage(currentPage, chanID, 
         activity, this); 
       loading = true; 
      } 
     } 
} 

@Override 
public void onTaskFinished() { 
    titles.addAll(ActiveUser.getInstance().getWebVidInfo(1)); 
    thumbs.addAll(ActiveUser.getInstance().getWebVidInfo(2)); 
    data.addAll(ActiveUser.getInstance().getWebVidInfo(3)); 
    describtions.addAll(ActiveUser.getInstance().getWebVidInfo(4)); 
    vidOwnerIDs.addAll(ActiveUser.getInstance().getWebVidInfo(4)); 

    notifyDataSetChanged(); 

} 

只是爲了clearify我在做什麼;一旦列表的底部可見,我開始一個AsyncTask獲取更多的視頻。在asynctask中,我將適配器設置爲一個事件的偵聽器,這個事件在asynctask完成時觸發 - 這是有效的。

onTaskFinished()上面的最後一個方法 - 在這裏,我將新項目添加到適配器用來填充每個列表項目的4個列表中,最後我通知適配器。

因此,新項目都添加好,問題是,在新的之前添加的項目,由於某種原因被刪除,或不再可見。

忘了補充一點,我已經驗證了該名單的長度確實增加,這意味着它同時包含原始數據和新加入的

任何想法?

[編輯]加入其中i適配器設置到ListView

 adapter = new LazyAdapter(getActivity(), ActiveUser.getInstance() 
       .getWebVidInfo(3), 
       ActiveUser.getInstance().getWebVidInfo(1), ActiveUser.getInstance() 
         .getWebVidInfo(2), 
       ActiveUser.getInstance().getWebVidInfo(5), ActiveUser.getInstance() 
         .getWebVidInfo(4), CHAN_ID, FRAGMENT_MODE); 
     listing.setAdapter(adapter); 
     listing.setOnScrollListener(adapter); 
+0

如果您的適配器未更新從getCount返回的值,則可能會出現這種情況。這有可能嗎? – 2012-03-20 16:48:12

+0

@PhillipFitzsimmons它從getCount獲得的值是名爲「titles」的列表的長度,所以不要認爲這是問題。 – Line 2012-03-20 16:54:02

+0

當您將適配器設置爲列表視圖,以及您的自定義適配器的簽名時發佈代碼... – 2012-03-20 17:36:20

回答

0

回答我的問題的代碼。

原來問題是我對notifyDataSetChanged()的作用缺乏瞭解。它調用正在重新創建的適配器,其構造函數的參數與最初創建時相同。因此,我將這些新項目添加到適配器內部列表中並沒有任何影響。相反,我需要確保通過其constructer解析到適配器的列表包含所有項目。

因此,儘管我之前的方法沒有獲取適配器的內部列表以包含新舊數據,但適配器的totalItemCount未更新。