8 votes

Comment exclure un élément d'un FirebaseRecyclerAdapter ?

J'ai ce code dans mon populateViewHolder :

public void populateViewHolder(final CampaignHolder viewHolder, final Campaign campaign, final int position) {
            String k = getRef(position).getKey();
            ref.child(k).child("users").addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    if (!dataSnapshot.hasChild(getUid())) {
                       //Something...
                    }
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });
            //...Populating the viewholder...

Je souhaite supprimer l'article si !dataSnapshot.hasChild(getUid()) es true Sinon, continuez à remplir le ViewHolder normalement. Notez que je ne veux pas supprimer l'élément de la base de données Je veux seulement qu'il disparaisse de la FirebaseRecyclerAdapter . Quelle est la méthode disponible pour ce faire ?


Edita: Je suis TOUJOURS à la recherche d'une solution à ce problème car il a n'a pas été corrigé . Ma solution est VIVEMENT déconseillée et constitue une très mauvaise pratique, et j'ai reconsidéré la possibilité de l'utiliser moi-même.

3voto

Riley MacDonald Points 380

La meilleure pratique consiste à utiliser le filtrage côté serveur : https://firebase.google.com/docs/database/Android/retrieve-data#sorting_and_filtering_data

Pour l'instant, il n'y a aucun moyen de filtrer vos résultats côté client avec FirebaseUI (cependant, je crois qu'il est prévu de l'implémenter dans le futur) :
https://github.com/firebase/FirebaseUI-Android/issues/135

1voto

Ab_ Points 2323

Mise à jour : Il s'agit d'une très mauvaise pratique y très glitchy. I HAUTEMENT décourager N'IMPORTE QUI de l'utiliser puisqu'il volonté rendra votre RecyclerView très instable et provoquera un chargement excessif de données, ce qui est PAS ce que veulent vos utilisateurs .

J'ai fini par le faire manuellement :

~~if(x) viewHolder.itemView.setVisibility(View.GONE); //itemView is a view provided by Android, no need to initiate it.~~

Cela signifie que si x es true , récupère la ligne et fixe sa visibilité à GONE . Cela a résolu le problème pour moi. Je vais probablement le mettre sur GitHub.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X