0

私は現在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); 

答えて

0

アダプタは現在、常にそれが基礎となるFirebaseDatabase参照またはQueryによって返された順序でデータを表示します。

feature request on the Github repoを添付することができます(まだthis oneに記載されているかどうかわからないため)。あるいは、ライブラリをフォークして、この機能の独自実装をロールバックすることもできます。

+0

迅速な対応に感謝します。単純化せずに作業していますので、私の20の他の項目が完了したらそれに戻ってきます;-)チェーンベースのクエリ、またはチェーンベースのソート基準がFirebaseの今後の機能リストに何かありますか?上位100のリーダーボードの結果を表示し、リストに表示されていない場合はユーザーをリストに追加するか、現在のユーザーのいずれかの側を表示すると効果的です。すべてのすばらしい拡張機能ですが、必須ではありません。再度、感謝します。 –

+0

これについてもう少し考えてみると、1つのクエリに基づいて自分自身のリストを作成し、並べ替え/追加してから、すべての結果をrecyclerviewに表示できます。 Firebaseのクエリに基づいてリストを作成する方法がわからない - 良い例へのリンクがない限り、検索する必要がありますか? –

0

解決策をフィードバックするために私は思いついた。私は私が達成しようとしているものに応じて、並べ替えたり(複数のクエリを使用する場合)追加することができます私自身のリストを作成してしまうことになりました。これは、標準のRecyclerViewアダプタを使用して表示されます。それは素晴らしい作品です。

private final List<Post> postList = new ArrayList<>(); 

dataQuery.addListenerForSingleValueEvent(new ValueEventListener() 
{ 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) 
    { 
     postList.clear(); // in this example it's a newQuery, so clear postList 
     for (DataSnapshot child : dataSnapshot.getChildren()) 
     { 
      Post post = child.getValue(Post.class); 
      postList.add(post); 

      int myPosition = sortData(); // uses Collections.sort() to sort data 

      mAdapter.addPosts(postList); 
      mAdapter.notifyDataSetChanged(); 
      mRecycler.scrollToPosition(myPosition); 
     } 
    } 
}); 
関連する問題