2016-11-13 5 views
0

Innen MainActivity, ich habe diese Funktion:Firebase Sortierung vom höchsten zum niedrigsten ~ Android

public void sortingData() { 

    mRootRef = new Firebase("https://fyp-1-43a27.firebaseio.com/User"); 
    dbSortAllData = FirebaseDatabase.getInstance().getReference(); 

    ListView mLvScore = (ListView) findViewById(R.id.lvScore); 

    final List<UserInformation> listScore = new LinkedList<>(); 
    final ArrayAdapter<UserInformation> adapter 
      = new ArrayAdapter<UserInformation> 
      (this, R.layout.scoreboard_row, listScore) { 

     @NonNull 
     @Override 
     public View getView(int position, View view, ViewGroup parent) { 
      if (view == null) { 
       view = getLayoutInflater().inflate(R.layout.scoreboard_row, parent, false); 
      } 

      UserInformation item = listScore.get(position); 
      ((TextView) view.findViewById(R.id.tvScoreName)).setText(item.getName()); 
      ((TextView) view.findViewById(R.id.tvScorePoint)).setText(item.getScore()); 
      return view; 
     } 
    }; 
    mLvScore.setAdapter(adapter); 

    com.firebase.client.Query queryRef = mRootRef.orderByChild("score").startAt("score").endAt("score").limitToFirst(50); 
    queryRef.addChildEventListener(new com.firebase.client.ChildEventListener() { 
     @Override 
     public void onChildAdded(com.firebase.client.DataSnapshot dataSnapshot, String s) { 
      UserInformation sI = dataSnapshot.getValue(UserInformation.class); 
      listScore.add(sI); 
      adapter.notifyDataSetChanged(); 
     } 

     @Override 
     public void onChildChanged(com.firebase.client.DataSnapshot dataSnapshot, String s) { 

     } 

     @Override 
     public void onChildRemoved(com.firebase.client.DataSnapshot dataSnapshot) { 

     } 

     @Override 
     public void onChildMoved(com.firebase.client.DataSnapshot dataSnapshot, String s) { 

     } 

     @Override 
     public void onCancelled(FirebaseError firebaseError) { 

     } 
    }); 
} 

My Model-Klasse:

public class UserInformation implements Comparable<UserInformation> { 

    public String name; 
    public String age; 
    public String score; 

    public UserInformation() {} 

    public UserInformation(String name, String age, String score) { 
     this.name = name; 
     this.age = age; 
     this.score = score; 
    } 

    // ... Getters and Setters here. 
} 

Dieses Stück Code arbeitet, sortiert ich vom niedrigsten zum höchsten .

Mein Problem ist, wie sortiere ich es von höchster zu niedrigsten? Vorschläge und Ratschläge werden sehr geschätzt.

+2

Firebase sortiert lexikografisch, AFAIK. Sie können die Daten des ArrayAdapters einfach umkehren –

+0

Warum verwenden Sie https://firebase.com anstelle von https://firebase.google.com? Firebase.com ist veraltet. –

+0

Collections.sort (Partituren, neue Vergleicher () { public int vergleichen (Score o1, Score o2) { return o2.getScores(). Get (0) .compareTo (o1.getScores(). Get (0)); } }); Oben Code ist, was ich im Internet gefunden habe, aber ich weiß nicht wirklich, wie man es passt .. jede Anleitung geschätzt – Arduino

Antwort

1

Sie können die Daten auf der Clientseite neu anordnen - kehren Sie die Liste einfach um.

Edit: Wenn Sie die Liste rückgängig machen möchten, können Sie verwenden:

Collections.reverse(listScore); 
adapter.notifyDataSetChanged(); 

Sie können auch nur jedes Element hinzufügen, die Sie aus der Datenbank der Vorderseite der Liste zu bekommen, um es in umgekehrter Bestellung:

public void onChildAdded(com.firebase.client.DataSnapshot dataSnapshot, String s) { 
     UserInformation sI = dataSnapshot.getValue(UserInformation.class); 
     listScore.addFirst(sI); 
     adapter.notifyDataSetChanged(); 
    } 

und die Erklärung von listScore ändern:

final LinkedList<UserInformation> listScore = new LinkedList<>(); 
+0

@AbAppletic: Wenn Sie eine bessere Antwort haben, stellen Sie es als Antwort bitte. –

+0

10 @FrankvanPuffelen Ich weiß, wie man es mit einem RecyclerView macht, aber nicht mit einem ListView. Dennoch, diese Antwort hat nicht genug Informationen ... –

+0

Hallo Rhari, danke für die Beantwortung dieser Frage. Ich habe diese Methode gefunden, aber ich scheint nicht das Ideal zu bekommen, es in meine Methode zu passen, könnten Sie mehr spezifizieren, wie Show ich es schrieb? Anleitung wird sehr geschätzt – Arduino

0

Wenn Sie in umgekehrter Reihenfolge möchten, dann erstellen Sie einen zusätzlichen Schlüssel und speichern Sie diesen newKey = Wert (multipliziert mit) -1 als einfache Reihenfolge durch. Ich habe andere Lösung ausprobiert, indem ich ArrayList umgekehrt habe, aber wenn Sie neue Daten zur bestehenden Liste hinzufügen, dann wird es am schlimmsten werden. .

As you can see my priority score in negative so I can write

databaseReference = FirebaseDatabase.getInstance() getReference() .child ("node") Kind ("event") orderByChild ("priorityScore")..;

+0

Willkommen bei StackOverflow. Bitte machen Sie Ihre Antwort verständlicher, indem Sie Beispielcode hinzufügen. Es wäre sehr hilfreich, wenn Sie Ihrer Antwort eine aktualisierte Version des Codes in der Frage hinzufügen würden. –

+0

@ che-azeh aktualisiert, danke für den Vorschlag –

Verwandte Themen