私は現在FirebaseRecyclerAdapterを使用してFirebaseデータベースからデータを取得していますが、私が望む順番でデータを取得する方法はかなり整っています。FirebaseRecyclerAdapterのオフラインソート
重複を回避し、データベースのメンテナンスを容易にするため、データベースエントリにキーを追加して、そのキーに基づいてクエリを返すことができます。私はもともとデータを2回保管していました。一度すべてのユーザーに表示し、ユーザーが特定のグループ(groupNameの下)に参加した場合は1回です。グループに基づいてクエリを返すように
、次のように私のオリジナル検索されました:
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);
}
私は道のこの種ではCollections.sort()に渡すことができるように、問題は、データが格納されている:
私のアダプタはかなり標準です:FirebaseUIライブラリ内の
private List<Post> mPosts = new ArrayList<>();
mPosts.add(model);
Collections.sort(mPosts, Post.Comparators.ALLTIME);
迅速な対応に感謝します。単純化せずに作業していますので、私の20の他の項目が完了したらそれに戻ってきます;-)チェーンベースのクエリ、またはチェーンベースのソート基準がFirebaseの今後の機能リストに何かありますか?上位100のリーダーボードの結果を表示し、リストに表示されていない場合はユーザーをリストに追加するか、現在のユーザーのいずれかの側を表示すると効果的です。すべてのすばらしい拡張機能ですが、必須ではありません。再度、感謝します。 –
これについてもう少し考えてみると、1つのクエリに基づいて自分自身のリストを作成し、並べ替え/追加してから、すべての結果をrecyclerviewに表示できます。 Firebaseのクエリに基づいてリストを作成する方法がわからない - 良い例へのリンクがない限り、検索する必要がありますか? –