mav-raj
mav-raj

Reputation: 771

Display specific data from firebase inside Recycler view

I have a tab layout inside one of my activity. Different tabs extends different fragments. I have to display data in cardView inside fragment. CardView will contain all data of a single child inside Bills.

This is the my activity

enter image description here

This is how my database look like:
enter image description here

Now the problem is instead of displaying data of all child inside Bills node I need to filter them with two things 1. userId and 2. billType. Now if userId is matched with mUser.getUid() which is unique key of current user then it should check for billType suppose, if billType is Electronics then it should be visible inside electronics tab.

This is code of my fragment view of 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;

}

}

Suppose only last node is having billType: Electronics then, Electronics Tab should contain last card. What changes do I need in this code. Thanks in advance. Any help is appreciated.

Upvotes: 3

Views: 1909

Answers (1)

user9970916
user9970916

Reputation:

you need to filter your bills node that can be easily done with .equalto

In your firebase recycler view at the database reference:

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

instead of using mRef as your database reference you can filter by saying to whichever category you need to display(NOTE:this applies only if youre duplicating your code in every fragment)

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

Now, on the other hand when the userid doesnt match then display according to the bill type.

Upvotes: 1

Related Questions