Адаптеры notifyDataSetChanged не работают - PullRequest
3 голосов
/ 18 октября 2010

РЕДАКТИРОВАТЬ 2:

Я действительно решил свою проблему, но я не знаю, как: SI немного перемещал мой фрагмент кода, внезапно это сработало.Должно быть, что-то сделал в неправильном порядке, но это странно, проверял это много раз.Спасибо за вашу помощь, и извините, я не могу опубликовать ответ;)

Привет.

У меня есть представление списка, которое я пытаюсь обновить, чтобы обновить его самостоятельно, когда я добавляюэлемент в базовый список массивов.

Вот фрагмент кода:

private void addEvent() {
    arrlEvents.add( event );
    adptEvents.notifyDataSetChanged();
    updateSaveFile();
    filterList();
}

ArrlEvents - это основной массив с событиями, и я добавляю одно событие, пытаясь обновить представление списка.с notifyDataSetChanged (), но это не работает.Кто-нибудь может помочь?

Спасибо за ваше время:)

РЕДАКТИРОВАТЬ: Вот исходный код для адаптера:

private ArrayAdapter<Event> adptEvents;
adptEvents = new ArrayAdapter<Event>( EventCalendar.this, R.layout.list_items, arrlEvents );

Ответы [ 2 ]

2 голосов
/ 20 октября 2010

Нет постоянной связи между arrlEvents и adptEvents .... последний просто инициализирует себя элементами из первого. У adptEvents нет возможности узнать, когда изменится arrlEvents.

Чтобы добавить новые элементы, вы должны вызвать adptEvents.add (событие) и не беспокоиться о явном вызове notifyDataSetChanged (), поскольку ArrayAdapter.add () делает это автоматически .

2 голосов
/ 19 октября 2010

Я видел, что иногда он просто случайно не уведомляет адаптер.

Попробуйте использовать adptEvents как защищенный или общедоступный в глобальной области.

Я обнаружил, что когда это не работает. Вы можете просто переустановить адаптер, просто заменив notifyDataSetChanged () на:

adptEvents = new ArrayAdapter<Event>( EventCalendar.this, R.layout.list_items, arrlEvents );

Edit:

Вот фрагмент кода из приложения, которое я написал, которое работает.

Определение класса:

public class ClassName extends ListActivity implements AdapterView.OnItemSelectedListener {

Глобальная переменная:

CustomAdapter adapter;

в OnCreate ():

adapter = new CustomAdapter(this,R.layout.layout_name,dataSet);
setListAdapter(adapter);

Всякий раз, когда мне нужно уведомить

adapter.notifyDataSetChanged();
...