2015-02-10 74 views
0

我有我的listView適配器,我想更新我的適配器使用NotifyDataSetChanged(),但它不適用於我。這就是我在我的適配器添加數據:Adapter.NotifyDataSetChanged不起作用

if (Messages.Count != 0) { 
    ChatAdapter = new BubbleAdapter (this, Messages); 
    if(listViewChat.Adapter == null) { 
     listViewChat.Adapter = ChatAdapter; 
    } else { 
     ChatAdapter.NotifyDataSetChanged(); 
    } 
} 

但是就像我說如果我更新使用這種方式不工作... ,我的ListView是滾動到頂部:

ChatAdapter = new BubbleAdapter (this, Messages); 
listViewChat.Adapter = ChatAdapter; 
+0

消息是一個對象數組嗎? – sUndeep 2015-02-10 09:24:58

+0

它是List 。消息泡泡這是我的課,我有消息和一些關於消息的數據 – Adept22 2015-02-10 09:31:40

+0

請看下面提到的修改後的代碼。我也面臨同樣的問題,並且解決了這個想法。 – sUndeep 2015-02-10 09:33:52

回答

0

請看下面的代碼。你必須做類似於我下面提到的。由於我沒有你的整個代碼片段,所以我修改了你提到的代碼:

ArrayList<MessageBubble> MessagesAll = new ArrayList<MessageBubble>(); 
ChatAdapter = new BubbleAdapter (this, MessagesAll); 
listViewChat.setAdapter(ChatAdapter); 

MessageBubble Messages = new MessageBubble(); 
Messages.setMessage("Hi"); 
if (Messages.Count != 0) { 
    MessagesAll.add(Messages); 
    ChatAdapter.notifyDataSetChanged(); 
} 

如果你還沒有成功,請讓我知道。

+0

這種方法對我不起作用 – Adept22 2015-02-10 15:25:04

+0

@ Adept22我確定你在某個地方犯了錯誤。如果你可以把我的整個代碼和你的適配器一起發佈,那麼只有我可以提供幫助。 – sUndeep 2015-02-11 06:35:29

0

嘗試:

listViewChat.setAdapter(ChatAdapter); 

您可以用替換整個塊。如果列表爲空,則適配器也將爲空,並且列表視圖將用零個項目刷新。

0

使用ChatAdapter.notifyDataSetInvalidated();而不是ChatAdapter.notifyDataSetChanged();

+0

可能不是一個好主意。在語義上,'。notifyDataSetInvalidated'應該表示數據在'.notifyDataSetChanged'時不再可見。 – 2015-02-11 14:50:52

0

首先,我要感謝堆棧貢獻者的每個人和每個人。我相信我欠你更多的感謝。

這個問題已經佔用了我太多的時間。對於仍在尋找解決方案的人員:

  1. performFilter應保持不變。

  2. 的publishResults應該簡單:

    mIngredientList =(ArrayList的)results.values; adapter.clear();如果(mIngredientList!= null){intI = 0; i < mIngredientList.size(); i ++) adapter.add(mIngredientList.get(i)); }

  3. 特技是這樣的: 公共無效onTextChanged(CharSequence中的CharSequence,INT I,INT I1,I2 INT){

    mIngredientAdapter.getFilter()濾波器(charSequence.toString());。 mItemList.setAdapter(mIngredientAdapter); } 不重新添加適配器,似乎不起作用。