2 votes

Afficher des données spécifiques de firebase dans la vue Recycler

J'ai une disposition d'onglets dans une de mes activités. Les différents onglets étendent différents fragments. Je dois afficher des données dans cardView dans le fragment . CardView contiendra toutes les données d'un seul enfant à l'intérieur de la carte. Factures .

C'est mon activité

enter image description here

Voici à quoi ressemble ma base de données :
enter image description here

Maintenant, le problème est qu'au lieu d'afficher les données de tous les enfants à l'intérieur de l'ordinateur. Factures noeud J'ai besoin de les filtrer avec deux choses 1. userId y 2. Type de facture . Maintenant si userId est apparié avec mUser.getUid() qui est la clé unique de l'utilisateur actuel, alors il doit vérifier que Type de facture Supposons que le type de facture soit électronique, il devrait être visible dans l'onglet électronique.

Voici le code de ma vue fragmentée de viewElectronics.java

public class viewElectronics extends Fragment {

private RecyclerView mReceipt;
private FirebaseAuth mAuth;
private FirebaseUser mUser;
private DatabaseReference mRef;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.electronics_layout, container, false);
    mAuth = FirebaseAuth.getInstance();
    mUser = mAuth.getCurrentUser();
    mRef = FirebaseDatabase.getInstance().getReference().child("Bills");
    mReceipt = (RecyclerView) rootView.findViewById(R.id.electronicsRecycler);
    mReceipt.setLayoutManager(new LinearLayoutManager(getContext()));

    FirebaseRecyclerAdapter<DataModel, ReceiptViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<DataModel, ReceiptViewHolder>
            (DataModel.class, R.layout.reciept_row, ReceiptViewHolder.class, mRef){
        @Override
        protected void populateViewHolder(ReceiptViewHolder viewHolder, DataModel model, int position) {
            viewHolder.setBillNo("Bill No : " + model.getBillNo());
            viewHolder.setStoreName("Store Name : " + model.getCompany());
            viewHolder.setDate("Date : " + model.getDate());
            viewHolder.setTime("Time : " + model.getTime());
            viewHolder.setBillTotal("Total : " + model.getTotal());
        }
    };

    mReceipt.setAdapter(firebaseRecyclerAdapter);
    return rootView;

}

}

Supposons que seul le dernier nœud ait type de facture : Électronique alors, l'onglet électronique devrait contenir la dernière carte. Quelles modifications dois-je apporter à ce code ? Merci d'avance. Toute aide est appréciée.

1voto

Vous devez filtrer votre noeud de factures, ce qui peut être fait facilement avec .equalto

Dans votre vue de recyclage de firebase à la référence de la base de données :

if( userid.equalto(mUser.getUid())){
mRef.orderbychild("billtype").equalto("Electronics")//whatever Category of fragment
else{(adapter.getposition(position).getKey()).orderbychild("billType")}

au lieu d'utiliser mRef comme référence de votre base de données, vous pouvez filtrer en disant à quelle catégorie vous avez besoin d'afficher (NOTE:ceci s'applique seulement si vous dupliquez votre code dans chaque fragment)

 mRef.orderbychild("billtype").equalto("Electronics")

D'un autre côté, si l'identifiant ne correspond pas, l'affichage se fait en fonction du type de facture.

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