这里是我的代码:
private RecyclerView recycleRank;
private LinearLayoutManager layManRank;
private FirebaseRecyclerAdapter<Word, RankingActivity.RankingViewHolder> recAdapterRank;
...
DatabaseReference personsRef = FirebaseDatabase.getInstance().getReference("Word");
Query personsQuery = personsRef.orderByChild("count");
recycleRank.hasFixedSize();
layManRank = new LinearLayoutManager(this);
layManRank.setReverseLayout(true);
layManRank.setStackFromEnd(true);
recycleRank.setLayoutManager(layManRank);
因此,对于.setReverseLayout
,计数以降序显示。没有它,它将以最小的数字开始,然后下降到最高的数字。但这应该是另一回事。
recAdapterRank = new FirebaseRecyclerAdapter<Word, RankingViewHolder>(personsOptions) {
@Override
protected void onBindViewHolder(RankingActivity.RankingViewHolder holder, final int position, final Word model) {
holder.setWord(model.getWord());
long score = model.getCount();
holder.setScore(String.valueOf(score));
holder.setRank(String.valueOf(holder.getAdapterPosition()));
}
holder.setRank(String.valueOf(holder.getAdapterPosition()));
在此,在排名中输出相应的编号。
因此该活动应如下所示
# Word Score
1 Tree 12
2 Wood 9
但是在我的情况下,因为列表是反向的,所以编号从最高编号开始,然后变为0。
我该如何处理?我需要一个整数数组或类似的东西吗? 怎样才能使排名只有100个单词呢?当前,排名中有来自数据库的所有单词。
谢谢你们
答案 0 :(得分:0)
这正是我使用Firestore的原因。没有确切的方法可以执行类似的操作:使用Firebase数据库进行myQuery.orderBy(“ field”,DESCENDING)。
您可以通过多种方式来绕过这个问题,首先想到的是Collections.reverse(mylist);
要限制为第100名,请在查询中使用limitToFirst(100)
答案 1 :(得分:0)
好,这样您就可以解决。
Query personsQuery = personsRef.orderByChild("count").limitToLast(100);
感谢@Hocine B
除了要反转它,还可以使用:
recAdapterRank = new FirebaseRecyclerAdapter<Word, RankingViewHolder>(personsOptions) {
@Override
protected void onBindViewHolder(RankingActivity.RankingViewHolder holder, final int position, final Word model) {
holder.setWord(model.getWord());
long score = model.getCount();
holder.setScore(String.valueOf(score));
//Here is the Code
int realRank = 100 - holder.getAdapterPosition();
holder.setRank(String.valueOf(realRank));
}