2

I just got started with Firestore. So I tried fitting my data directly into a recyclerview, here's the code I used for reference. Here's my UserRecyclerView Fragment :

public class UserRecyclerView extends Fragment{
private ArrayList<User> user;
RecyclerView mRecyclerView;
public UserRecyclerView(){}

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.recycler_view,container,false);
    mRecyclerView = (RecyclerView) view.findViewById(R.id.recycler_view);

    FirestoreRecyclerAdapter adapter = getFirestoreRecyclerAdapter();
    mRecyclerView.setAdapter(adapter);
    mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));

return view;
}

@NonNull
private FirestoreRecyclerAdapter getFirestoreRecyclerAdapter() {
    Query query = FirebaseFirestore.getInstance()
            .collection("users");

    FirestoreRecyclerOptions<User> options = new FirestoreRecyclerOptions.Builder<User>()
            .setQuery(query, User.class).build();

    return new FirestoreRecyclerAdapter<User, UserViewHolder>(options) {
        @Override
        protected void onBindViewHolder(UserViewHolder holder, int position, User model) {
            Log.d("USER", "DATA: "+model.getName());
            holder.BindView(position, model);

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

            return new UserViewHolder(view);
        }
    };
}

private class UserViewHolder extends RecyclerView.ViewHolder{
    TextView info;
    UserViewHolder(View itemView) {
        super(itemView);
        info = (TextView) itemView.findViewById(R.id.info_text);
    }

    void BindView(int position, User model){

        info.setText(model.getName()+" , "+model.getId());
    }
} 

There's nothing in my MainActivity except for starting the above fragment. I don't know what's wrong with my code. It shows no errors, when I run the app it doesn't crash. It just enters into the recyclerview layout, I checked it by placing a textview field for being sure(now removed). I want you to help me out with the code. It's probably because of the adapter? Help me figure out. I have also uploaded a snippet of my database. Thanks in advance!

Frank van Puffelen
  • 565,676
  • 79
  • 828
  • 807
Faisal
  • 86
  • 1
  • 8
  • For future visitors, you can take a look **[here](https://stackoverflow.com/questions/49277797/how-to-display-data-from-firestore-in-a-recyclerview-with-android/49277842)**, where I have explained step by step how to display data from Firestore into a `RecyclerView` using Android. – Alex Mamo Mar 14 '18 at 13:05

2 Answers2

3

Make sure you call startListening on the adapter to initiate the connection to Cloud Firestore, otherwise no data will be loaded.

@Override
protected void onStart() {
    super.onStart();
    adapter.startListening();
}

@Override
protected void onStop() {
    super.onStop();
    adapter.stopListening();
}

See: https://github.com/firebase/FirebaseUI-Android/blob/master/firestore/README.md#firestorerecycleradapter-lifecycle

Sam Stern
  • 24,624
  • 13
  • 93
  • 124
  • or we can keep .setLifecycleOwner(getViewLifecycleOwner()) while initialize FirestoreRecyclerOptions object will also start listening – Mohd Qasim Nov 05 '20 at 07:20
0

Create recyclerview like below:

FirestoreRecyclerAdapter adapter = getFirestoreRecyclerAdapter();
//add below line
mRecyclerView.setHasFixedSize(true);
mRecyclerView.setAdapter(adapter);
mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));