2016-09-24 2 views
0

У меня есть recyclerview, не обновляя и я не знаю, почему:Уведомлять набор данных изменились не извлечение новых данных для recyclerview

В моем основном фрагменте я получаю данные для моего recyclerview в oncreateview так:

alarms = AlarmCollection.getAlarms(getActivity()); 

, а затем я установить адаптер, как это:

// Adapter 
    adapter = new AlarmsAdapter(getActivity(), alarms); 
    rv.setAdapter(adapter); 

а затем сбросить данные на TimerTask/работоспособным, чтобы обновить значения на recyclerview (они аль так что они меняются один раз в минуту).

Это делается с помощью простой уведомит datasetchanged:

adapter.notifyDataSetChanged(); 

Проблема заключается в том, хотя, как вы можете видеть выше, я загрузить данные через AlarmCollection. Это захватывает список из общих настроек.

Но когда я звоню в уведомляющий набор данных, это не вызывается снова.

У меня создалось впечатление, что когда вы вызываете ect ect на recyclerview, он обновляет список или обновляет ли этот файл pureley?

ответ

1

Как уже упоминалось @GpRyan, проблема заключается в этой строке:

alarms = AlarmCollection.getAlarms(getActivity()); 

Каждый раз, когда вы делаете новый экземпляр alarms .Но адаптера ищет изменения в экземпляре alarms переданному Это. так что это не сработает.

что вам нужно сделать, это удалить все предметы из alarms и добавить новые данные снова.

alarms.removeAll(); 
alarms.addAll(AlarmCollection.getAlarms(getActivity())); 
adapter.notifyDataSetChanged(); 

ПРИМЕЧАНИЕ: Обновление alarms в основном потоке. Однажды мне требуется много времени, чтобы понять обновление набора данных в другом потоке не будет работать с адаптером.

0

Если ваш getItemCount() возвращает 0, то notifyDataSetChanged() ничего не сделает.

убедитесь, что вы добавили getItemCount() в ваш адаптер RecyclerView.

@Override 
public int getItemCount() { 
    return alarms.size(); 
} 

EDIT: вы также можете использовать notifyitemrangechanged

adapter.notifyItemRangeChanged(0,alarms.size()); 
0

notifyDataSetChanged() только обновляет вид. Как правило, то, что вы будете делать это вызов notifyDataSetChanged() после того как вы изменили данные, который содержит адаптер (в вашем случае alarms

Так что вы должны делать:. Обновление alarms внутри вашей задачи таймера/работоспособным, а затем вызывая notifyDataSetChanged()

+0

Я также упомянул, что это работает, потому что адаптер указывает на ссылку «alarms», поэтому, когда он изменяется (добавляет, удаляет и т. Д.), Вам просто нужно сообщить пользовательскому интерфейсу, что он это сделал – GPRyan

 Смежные вопросы

  • Нет связанных вопросов^_^