我对我的代码有一个简短的问题。
我在Android应用中使用了recyclerview,并在我的Firebase数据库中填写了一些数据。
效果很好,但我注意到排序不对:/
我有这个代码:
private void getRankings() {
// hole anzahl an Teilnehmern
mDatabase.child(TEILNEHMERDATA).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// hole Anzahl aller Teilnehmer um das Ranking zu bestimmen
teilnehmerVar = (int) dataSnapshot.getChildrenCount();
mDatabase.child(TEILNEHMERDATA).orderByChild("score").addChildEventListener(new ChildEventListener() {
Teilnehmer teilnehmer = new Teilnehmer();
int i = teilnehmerVar+1;
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
// teamname, Platzierung, Punkte
int punkteStand = (int) Double.parseDouble(String.valueOf(dataSnapshot.child("score").getValue()));
i -= 1;
this.teilnehmer = new Teilnehmer(dataSnapshot.getKey(), ((String) dataSnapshot.child("teamname").getValue()), "Platz " + i, punkteStand + " Punkte");
teilnehmerList.add(0, this.teilnehmer); // add to recyclerview: add(0, teilnehmer) gebe in desc aus von 0 zum n. eintrag
mAdapter.notifyDataSetChanged(); // save
}
在这一行:
mDatabase.child(TEILNEHMERDATA).orderByChild("score").addChildEventListener(new ChildEventListener() {
按分数订购儿童
我的结构数据是这样的:
"Teilnehmer" : {
"user_0gPpHXzKqLd2xA" : {
"image" : "",
"score" : "0",
"startnummer" : "1",
"teamname" : "Andy Foo"
},
行分数包含一个整数,其数据范围为0到∞
我的布局如下:
Teamname1 9 Punkte
Platz 1
Teamname2 0 Punkte
Platz 2
Teamname3 1000 Punkte
Platz 3
但绝对错误:/
9大于10000 似乎我的查询订单只有第一个数字
1..2..3 ..
我的Recyclerview初始化:
recyclerView.setHasFixedSize(true);
RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());
recyclerView.setLayoutManager(mLayoutManager);
recyclerView.addItemDecoration(new DividerItemDecoration(this, LinearLayoutManager.VERTICAL));
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setAdapter(mAdapter);
任何人都可以帮助我吗?
答案 0 :(得分:0)
创建回收站视图时使用此选项
LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
layoutManager.setReverseLayout(true);
layoutManager.setStackFromEnd(true);
recyclerView.setLayoutManager(layoutManager)
答案 1 :(得分:0)
如果您将值存储为字符串,则它们将按字典顺序排序。要获得所需订单,请将它们存储为数字或将它们存储在一个字符串中,该字符串也按您想要的顺序排序。 E.g。
"Teilnehmer" : {
"user_0gPpHXzKqLd2xA" : {
"image" : "",
"score" : "00000",
"startnummer" : "1",
"teamname" : "Andy Foo"
},
"user_0gPpHXzKqLd2xB" : {
"image" : "",
"score" : "00123",
"startnummer" : "1",
"teamname" : "Andy Bar"
},
所以在上面的结构中,当您在score
上订购时,它仍然会根据数值进行排序。这是一个常见的技巧,例如,您经常会看到格式为2017-06-19
的日期,因为这可以确保它们以正确的方式排序日期(即使类型是字符串)。
请注意,由于您的后端系统限制,我建议您这样做。在大多数情况下,您只需将数字存储为数字并阻止此解决方法。
请参阅: