2

I'm using FirebaseRecyclerAdapter to populate a RecyclerView in a Fragment.

Here's my code

mDatabase = FirebaseDatabase.getInstance().getReference();
myAdapter = new FirebaseRecyclerAdapter<Product, ProductViewHolder>(Product.class,
        R.layout.product_item,ProductViewHolder.class,
        mDatabase.child("clothes")) {
    @Override
    protected void populateViewHolder(ProductViewHolder viewHolder, Product model, int position) {
        mProgressBar.setVisibility(ProgressBar.INVISIBLE);
        viewHolder.name.setText(model.name);
        viewHolder.price.setText(model.price);
        Glide.with(getActivity()).load(model.imageUri).into(viewHolder.thumbnail);
        Log.d("NAME", model.name);
    }
};

recyclerView.setAdapter(myAdapter);

The problem is, the ProgressBar keeps moving in the first launch, it never hides and the RecyclerView never shows itself but If I exit the app and launch again, the RecyclerView is properly populated, even if the screen locks itself and I unlock it, the RecyclerView is populated. I'm confused.

Reaz Murshed
  • 23,691
  • 13
  • 78
  • 98
Mufad
  • 191
  • 1
  • 15

2 Answers2

7

Remove the recyclerView.setHasFixedSize(true) from your code and then check if the code works fine now.

And for dismissing the ProgressBar, its good to set the visibility to GONE.

mProgressBar.setVisibility(View.GONE);

For more information you can see this Github link. I think the same issue is reported here.

Reaz Murshed
  • 23,691
  • 13
  • 78
  • 98
0

In your activity.xml file, set ProgressBar property

android:visibility="invisible"

and in your populateViewHolder method, set mProgress.setVisibility(View.GONE); after setting data to TextViews & ImageView

 protected void populateViewHolder(ProductViewHolder viewHolder, Product model, int position) {
        viewHolder.name.setText(model.name);
        viewHolder.price.setText(model.price);
        Glide.with(getActivity()).load(model.imageUri).into(viewHolder.thumbnail);
        mProgress.setVisibility(View.GONE);
        Log.d("NAME", model.name);
    }