Adapter.NotifyDataSetChanged не работает

Рейтинг: 1Ответов: 1Опубликовано: 10.02.2015

Здравствуйте!

Имеется listView, который я пытаюсь обновлять с помощью NotifyDataSetChanged(), но listView при этом не обновляется. Я использую такой способ:

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

Если я обновляю способом ниже, то мой listView автоматически прокручивается наверх, что мне не нужно:

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

Ответы

▲ 2Принят

Замените

ChatAdapter.NotifyDataSetChanged();

На

listViewChat.Adapter.NotifyDataSetChanged();

И догадайтесь сами, почему так работает.

Короче говоря, представьте себе, что listViewChat - это машина, а ChatAdapter - это ее водитель.

ChatAdapter = new BubbleAdapter (this, Messages);

Создаете нового водителя

if(listViewChat.Adapter == null) {
        listViewChat.Adapter = ChatAdapter;
    } else {
        ChatAdapter.NotifyDataSetChanged();
    }

Если в машине нет водителя, то посадить в машину новосозданного водителя. Иначе новосозданный_водитель.завести машину. (ChatAdapter.NotifyDataSetChanged()). Но новосозданный водитель ведь не сидит в машине! там сидит старый!!!

if (Messages.Count != 0) {

    if(listViewChat.Adapter == null) {
        ChatAdapter = new BubbleAdapter (this, Messages);
        listViewChat.Adapter = ChatAdapter;
    } else {
        ChatAdapter = (BubbleAdapter)listViewChat.Adapter;
        ChatAdapter.SetMessages(Messages);//реализовать метод, который бы записывал новые значения в адаптер
        ChatAdapter.NotifyDataSetChanged();
    }
}