Я ищу способ отсортировать мои данные в RecyclerView. В данный момент я использую для этого метод приоритета, но я знаю, что для этого лучше применить метод orderByChild
или orderByValue
. Я просто не могу найти, как это сделать правильно.
Моя (соответствующая) структура данных следующая (формат болта):
path /events/{event}/GeneralInfo is GeneralInfo{}
path /events/{event}/instances/{instance} is Instance{}
type GeneralInfo {
owner : KeyString,
name : ShortNameString | Null,
color : Number | Null,
description : NoteString | Null,
shared : Boolean | Null,
startDate : DateString,
endDate : DateString,
instances: Map<KeyString, Boolean>,
logoAvailable : Boolean | Null
}
type Instance {
eventKey : KeyString,
startDateTime : DateString,
endDateTime : DateString,
note : String | Null,
}
type KeyString extends String {
validate() { this.length > 0 && this.length <= 255 }
}
type DateString extends String {
validate() { this.length == 12 }
}
type ShortNameString extends String {
validate() { this.length >= 0 && this.length <= 32 }
}
В настоящее время FirebaseRecyclerAdapter инициализируется следующим образом:
Query q = getGeneralInfo( eventKey ).child( "instances" ).orderByPriority();
mAdapter = new FirebaseRecyclerAdapter<Boolean, InstanceViewHolder>(Boolean.class, R.layout.instance_card, InstanceViewHolder.class, q) {
@Override
protected void populateViewHolder(final InstanceViewHolder viewHolder, Boolean model, final int position) {
getInstanceByKey(mEventKey, refKey).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Instance i = dataSnapshot.getValue(Instance.class);
....
Обратите внимание, что я использую ключевое поле индекса (поле с логическим значением) для извлечения фактических данных. Поле индекса в настоящее время отсортировано (с использованием приоритетов).
Я хотел бы сортировать непосредственно по экземплярам (чтобы упростить задачу и иметь возможность отказаться от использования приоритетов).
p.s. Хотя может показаться, что данные не нормализованы, это так: путь /events/{event} никогда не используется для извлечения данных. Это делается только для того, чтобы иметь некоторый обзор.
Double.parseDouble( i.getStartDateTime() );
- person Peter   schedule 19.09.2016DateString
имеет формат: 201609191200 (19 сентября, 12:00). - person Peter   schedule 19.09.2016