How to load firebase data into recyclerview
Solution 1
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) {
}
});
}
}
Solution 2
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 ).
Related videos on Youtube
Tropix Dev
Updated on June 04, 2022Comments
-
Tropix Dev almost 2 years
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 arecyclerview
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.
-
Shruti about 6 yearsArrayAdapter wont work with RecyclerView, create a custom Adapter class
-
-
Pritish over 5 yearsdo we need to remove the listener?
-
kAmol over 5 yearsCan you explain bit more about
refers to name of nodes from where you are fetching data
-
Nabeel Nazir over 5 years@kAmol this model class will have getter and setter, through the getter you retrieve data from firebase and set data to firebase by setter
-
Android over 4 yearsPlease include an explanation of how and why this solves the problem would really help to improve the quality of your post, and probably result in more up-votes.