TransWikia.com

Ordenar las publicaciones en RecyclerView por numero de likes que cada una tiene

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());
    }
}

One Answer

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

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP