Tropix Dev
Tropix Dev

Reputation: 49

How to load firebase data into recyclerview

I'm seeking help on how to load a data stored in a Firebase Database into a recyclerview.

The below screenshot indicates how I would like for the data to be structured when loaded into the recyclerview.

I am able to access the data from individual paths such as "Upcoming/Events/03/23" using the addEventListener but unable to load dynamically into a recyclerview in the format above.

See Code below that I have below to load the children under the different nodes, but i'm able to load it into the recyclerview

private ListView mUserList;
private ArrayList<String> mUpcomingList = new ArrayList<>();

final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_expandable_list_item_1,mUpcomingList);
mUserList.setAdapter(arrayAdapter);

String CurrentString = date.toString().trim();
StringTokenizer tokens = new StringTokenizer(CurrentString, "/");
String first = tokens.nextToken();
String second = tokens.nextToken();
mDatabase = FirebaseDatabase.getInstance().getReference().child("Upcoming/Events").child(first);
mDatabase.addValueEventListener(new ValueEventListener() {

@Override
Public void onDataChange(DataSnapshot dataSnapshot) {

Log.d(TAG,"Listing children");

for (DataSnapshot child: dataSnapshot.getChildren()) {


mUpcomingList.add(child.getKey());
arrayAdapter.notifyDataSetChanged();
}

Your help is appreciated.

Upvotes: 2

Views: 16401

Answers (3)

user4571931
user4571931

Reputation:

when you used then you make recyclerview adatper and bind this adapter into a recycler view . used below code for display firebase all the data and change according your need and make changes.

RecyclerView Adapter::

public class DisplayAllData extends RecyclerView.Adapter<DisplayAllData.ItemViewHolder>{
    private  List<User> mUserLsit=new ArrayList<>();
    private Context mContext;

    @Override
    public ItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.row_layout,parent,false);
        return new ItemViewHolder(view);
    }

    public DisplayAllData(Context mContext,List<User> mUserLsit) {
        this.mContext=mContext;
        this.mUserLsit = mUserLsit;
    }

    @Override
    public void onBindViewHolder(ItemViewHolder holder, int position) {
        User user=mUserLsit.get(position);
        holder.mTvName.setText(user.name);
        holder.mTvEmail.setText(user.email);
        holder.mTvPwd.setText(user.pwd);
    }

    @Override
    public int getItemCount() {
        return mUserLsit.size();
    }

    public class ItemViewHolder extends RecyclerView.ViewHolder {
        TextView mTvName,mTvEmail,mTvPwd;
        public ItemViewHolder(View itemView) {
            super(itemView);
            mTvEmail=itemView.findViewById(R.id.rlTvEmail);
            mTvName=itemView.findViewById(R.id.rlTvName);
            mTvPwd=itemView.findViewById(R.id.rlTvPwd);

        }
    }
}

In Adapter take a simple layout and make three textview control and bind data into that. then after take activity layout and define recycler view in xml. then after used below code to read firebase database record and display recyclerview.

public class DisplayActivity extends AppCompatActivity {
    private RecyclerView mRvData;
    private DisplayAllData allDataAdapter;
    private DatabaseReference mDatabase;
    private TextView mTvEmpty;
    private FirebaseDatabase mFirebaseInstance;
    private List<User> mUserList = new ArrayList<>();

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.display_data);
        initView();
    }

    private void initView() {
        mFirebaseInstance = FirebaseDatabase.getInstance();
        mDatabase = mFirebaseInstance.getReference("usersDb/UserTable");
        mRvData = findViewById(R.id.rvData);
        mTvEmpty = findViewById(R.id.dlTvEmpty);
        mRvData.setLayoutManager(new LinearLayoutManager(this));
        mDatabase.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                mUserList.clear();
                for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
                    User user = dataSnapshot1.getValue(User.class);
                    mUserList.add(user);
                }
                allDataAdapter = new DisplayAllData(DisplayActivity.this, mUserList);
                mRvData.setAdapter(allDataAdapter);
                allDataAdapter.notifyDataSetChanged();
                if (mUserList.isEmpty())
                    mTvEmpty.setVisibility(View.VISIBLE);
                else
                    mTvEmpty.setVisibility(View.GONE);
            }


            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
    }
}

Upvotes: 4

Mostafijur Rahman
Mostafijur Rahman

Reputation: 221

final DatabaseReference cartListRef = FirebaseDatabase.getInstance().getReference().child("Cart List");
        FirebaseRecyclerOptions<Cart> options = new FirebaseRecyclerOptions.Builder<Cart>()
                .setQuery(cartListRef.child("User View")
                        .child(Prevalent.currentOnlineUser.getPhoneNumber())
                        .child("Products"), Cart.class).build();

        FirebaseRecyclerAdapter<Cart, CartViewHolder> adapter =
                new FirebaseRecyclerAdapter<Cart, CartViewHolder>(options) {
                    @Override
                    protected void onBindViewHolder(@NonNull CartViewHolder holder, int position, @NonNull final Cart model) {

                        holder.txtProductQuantity.setText("Quantity = " + model.getQuantity());
                        holder.txtProductName.setText(model.getPname());
                        holder.txtProductPrice.setText("Price = " + model.getPrice() + "৳");

                        int oneTypeProductPrice = ((Integer.valueOf(model.getPrice()))) * Integer.valueOf(model.getQuantity());
                        overTotalPrices = overTotalPrices + oneTypeProductPrice;

                        holder.itemView.setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {

                                CharSequence options[] = new CharSequence[]
                                        {
                                                "Edit",
                                                "Remove"
                                        };

                                AlertDialog.Builder builder = new AlertDialog.Builder(CartActivity.this);
                                builder.setTitle("Cart Options");

                                builder.setItems(options, new DialogInterface.OnClickListener() {
                                    @Override
                                    public void onClick(DialogInterface dialog, int i) {

                                        if (i == 0){

                                            Intent intent = new Intent(CartActivity.this, ProductDetailsActivity.class);
                                            intent.putExtra("pid", model.getPid());
                                            startActivity(intent);
                                        }
                                        if (i == 1){

                                            cartListRef.child("User View")
                                                    .child(Prevalent.currentOnlineUser.getPhoneNumber())
                                                    .child("Products")
                                                    .child(model.getPid())
                                                    .removeValue()
                                                    .addOnCompleteListener(new OnCompleteListener<Void>() {
                                                        @Override
                                                        public void onComplete(@NonNull Task<Void> task) {

                                                            if (task.isSuccessful()){

                                                                Toast.makeText(CartActivity.this,"Item removed successfully.",Toast.LENGTH_LONG).show();

                                                                Intent intent = new Intent(CartActivity.this, HomeActivity.class);
                                                                startActivity(intent);
                                                            }
                                                        }
                                                    });
                                        }
                                    }
                                });
                                builder.show();
                            }
                        });

                    }
                    @NonNull
                    @Override
                    public CartViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

                        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.cart_items_layout, parent, false);
                        CartViewHolder holder = new CartViewHolder(view);
                        return holder;
                    }
                };

        recyclerView.setAdapter(adapter);
        adapter.startListening();
    }

Upvotes: 0

Nabeel Nazir
Nabeel Nazir

Reputation: 430

You have to use FirebaseRecyclerAdapter, as

 FirebaseRecyclerAdapter<Model, ViewHolder> Adapter = new FirebaseRecyclerAdapter<Model, ViewHolder>(
            Model.class,  //Name of model class
            R.layout.row, //Row layout to show data
            viewHolder.class, //Name of viewholder class
            mDatabaseRef // Database Refernce
    ) {
        @Override
        protected void populateViewHolder(VieHolder viewHolder, Model model, int position) {

//Your Method to load Data

      }
    };
 RecyclerView.setAdapter(Adapter);

For this you have to create two other classes, One is viewholder ( to display data) and second model class ( refers to name of nodes from where you are fetching data ).

Upvotes: 2

Related Questions