0

I want to Sort from top to bottom on Firebase Database. Can anyone help me? I tried to use collections, but it didn't work.

Activity where starts the recycler view

public class activity_ranking extends AppCompatActivity {
RecyclerView rv;

List<User> users;

Adapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_ranking);


    rv = (RecyclerView)findViewById(R.id.recycler);

    rv.setLayoutManager(new LinearLayoutManager(this));

    users = new ArrayList<>();


    FirebaseDatabase database = FirebaseDatabase.getInstance();

    adapter = new Adapter(users);

    Collections.sort(users, new Comparator<User>(){
        public int compare(User obj1, User obj2)
        {
            // TODO Auto-generated method stub
            return (obj1.getStars() > obj2.getStars()) ? +1: (obj1.getStars() > obj2.getStars()) ? 1:0 ;
        }
    });

    rv.setAdapter(adapter);
    Query query = database.getReference().child("users").orderByChild("stars");

    query.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            users.removeAll(users);
            for (DataSnapshot snapshot:
                    dataSnapshot.getChildren()) {
                User user = snapshot.getValue(User.class);


                users.add(user);

            }
            adapter.notifyDataSetChanged();
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
}
}

MyClass user

public class User {
public User() {
}

String username;
String name;
int stars;
String id;

public User(String username, String name, int stars, String id) {
    this.username = username;
    this.name = name;
    this.stars = stars;
    this.id = id;
}

public String getUsername() {
    return username;
}

public void setUsername(String username) {
    this.username = username;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public int getStars() {
    return stars;
}

public void setStars(int stars) {
    this.stars = stars;
}

public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}
}
AL.
  • 36,815
  • 10
  • 142
  • 281

1 Answers1

1

To invert the list, add items to the beginning instead of the end. So instead of:

users.add(user);

do

users.add(0, user);

See: Java Arrays how to add elements at the beginning

Community
  • 1
  • 1
Frank van Puffelen
  • 565,676
  • 79
  • 828
  • 807