我有listView的适配器,我想使用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 :(得分: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();
}
如果你还没有成功,请告诉我。
答案 1 :(得分:0)
尝试:
listViewChat.setAdapter(ChatAdapter);
您可以用它替换整个块。如果列表为空,则适配器也将为空,并且列表视图将刷新为零项。
答案 2 :(得分:0)
使用ChatAdapter.notifyDataSetInvalidated();而不是ChatAdapter.notifyDataSetChanged();
答案 3 :(得分:0)
首先,我要感谢堆栈的每个人和每个人。我相信我欠你的谢意比我能给予的更多。
这个问题占用了我太多的时间。对于那些仍在寻找解决方案的人来说:
performFilter应保持原样。
publishResults应该简单如下:
mIngredientList =(ArrayList)results.values; adapter.clear(); if(mIngredientList!= null){ for(int i = 0; i&lt; mIngredientList.size(); i ++) adapter.add(mIngredientList.get(I)); }
诀窍是: public void onTextChanged(CharSequence charSequence,int i,int i1,int i2){
mIngredientAdapter.getFilter()滤波器(charSequence.toString())。 mItemList.setAdapter(mIngredientAdapter); } 不重新添加适配器,似乎不起作用。