Stack Overflow en español Asked by johnnnn on November 13, 2021
Quiero poner en orden por número más grande al número más pequeño los posts que tengo en Firebase. Estoy haciendo una búsqueda para ver los likes que tiene cada publicación y quiero ponerlas en orden del post que tiene más likes hasta el que menos likes tiene.
He pensado que podría hacerlo con getChildrenCount() que me devuelve el número de likes de cada publicación, pero luego no sé cómo ordenarlas…
Lo estoy haciendo así, pero no sé si está bien o no, o si hay mejor forma de hacerlo. Cómo lo puedo hacer?
TrendingFragment
public class TrendingFragment extends Fragment {
private RecyclerView mRecyclerView;
private PostAdapter mPostAdapter;
private List<Post> mPostList;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_trending, container, false);
mRecyclerView = view.findViewById(R.id.recycler_view);
mRecyclerView.setHasFixedSize(true);
mRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
mPostList = new ArrayList<>();
mPostAdapter = new PostAdapter(getContext(), mPostList);
mRecyclerView.setAdapter(mPostAdapter);
readPosts();
return view;
}
private void readPosts() {
Query query = FirebaseDatabase.getInstance().getReference("Posts").orderByChild("count");
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
mPostList.clear();
for (DataSnapshot dataSnapshot : snapshot.getChildren()) {
Post post = dataSnapshot.getValue(Post.class);
if (post != null) {
mPostList.add(post);
}
}
mPostAdapter.notifyDataSetChanged();
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
private class CustomComparator implements Comparator<Post> {
@Override
public int compare(Post o1, Post o2) {
return o1.getCount().compareTo(o2.getCount());
}
}
Puedes usar la interface Comparator para ordendar tus posts con Collections.sort. el método compareTo() es para comparar Strings y devuelve un entero dependientdo si la cadena va antes o después en orden alfabetico, sí tus datos son numéricos puedes devolver una resta de ambos como entero.
class SortByLikes implements Comparator<Post>
{
public int compare(Post o1, Post o2)
{
return Long.compare(o2.getCount(), o1.getCount());
}
}
Cuando termines de agregar todos los posts a tu lista puedes ordenarla de la siguiente forma
Collections.sort(mPostList,new SortByLikes())
Después de eso puedes crear o actualizar tua adapter
Answered by danms07 on November 13, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP