【发布时间】:2016-11-08 11:15:34
【问题描述】:
我目前正在使用 FirebaseRecyclerAdapter 从 Firebase 数据库中检索数据,并且我已经非常了解如何按照我想要的顺序检索数据。
为了避免重复和简化数据库维护,我想向数据库条目添加一个键,以便我可以根据该键返回查询。我最初存储数据两次。一目了然,如果用户加入了某个组(在 groupName 下),则一次。
要返回基于组的查询,我的原始搜索如下:
databaseReference.child(groupName).child("exerciseId"+mExerciseId).orderByChild(sortOrder).limitToFirst(100);
但我相信通过在我的帖子中添加关键“组”可以避免重复。 (当用户切换组时,它也使维护变得更加容易)。
“组”数据库查询现在变为:
databaseReference.child("exerciseId"+mExerciseId).orderByChild("group").equalTo(groupName);
一切都很好,只是数据不再按照“sortOrder”排序。由于 firebase 不允许多个排序条件,我相信我的解决方案在于离线排序。
那么,如何离线对适配器进行排序?
我的适配器很标准:
mAdapter = new FirebaseRecyclerAdapter<Post, PostViewHolder>(Post.class, R.layout.item_post, PostViewHolder.class, dataQuery)
{
@Override
protected void populateViewHolder(final PostViewHolder viewHolder, final Post model, final int position)
{
final DatabaseReference postRef = getRef(position);
// Bind Post to ViewHolder, setting OnClickListener for the star button
viewHolder.bindToPost(model, position, postRef.getKey(), null);
}
mRecycler.setAdapter(mAdapter);
}
我在 Post 中实现了 Comparable,问题是数据存储在哪里,以便我可以通过这种方式将其传递给 Collections.sort():
private List<Post> mPosts = new ArrayList<>();
mPosts.add(model);
Collections.sort(mPosts, Post.Comparators.ALLTIME);
【问题讨论】:
标签: android android-recyclerview firebase-realtime-database firebaseui