Adapter.NotifyDataSetChanged不起作用

时间:2015-02-10 09:13:05

标签: android xamarin xamarin.android

我有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;

4 个答案:

答案 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)

首先,我要感谢堆栈的每个人和每个人。我相信我欠你的谢意比我能给予的更多。

这个问题占用了我太多的时间。对于那些仍在寻找解决方案的人来说:

  1. performFilter应保持原样。

  2. publishResults应该简单如下:

    mIngredientList =(ArrayList)results.values; adapter.clear(); if(mIngredientList!= null){     for(int i = 0; i&lt; mIngredientList.size(); i ++)       adapter.add(mIngredientList.get(I)); }

  3. 诀窍是: public void onTextChanged(CharSequence charSequence,int i,int i1,int i2){

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