Search code examples
androidandroid-recyclerviewfragmentcardview

Recycler view is not attached after navigation


i am developing this app where i have used bottom navigation view. on my home fragment i have used two recycler views.i am fetchiing some data and images to display on home screen fragment. on start of the app the images are visible in both the recycler views but if i rotate the screen or navigate to other fragment the images are gone from the second recycler view while first recycler view is still showing images.

below is the code

  public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) { 
 mFavSubCatDatabase = 
 FirebaseDatabase.getInstance().getReference().child("FavSubCat");
    mFavSubCatDatabase.keepSynced(true);
    mFavCatDatabase = 
 FirebaseDatabase.getInstance().getReference().child("FavCat");
    mFavCatDatabase.keepSynced(true);
    //    mLayoutManager = new LinearLayoutManager(getContext());
    RecyclerView.LayoutManager mLayoutManager = new 
 GridLayoutManager(getContext(), 3);
    mFavSubCatList = (RecyclerView) 
    view.findViewById(R.id.HomesubcatOpeningRecler);
    mFavSubCatList.setHasFixedSize(true);
    mFavSubCatList.setLayoutManager(mLayoutManager);
    LinearLayoutManager mLayoutManager2
            = new LinearLayoutManager(getContext(), 
     LinearLayoutManager.HORIZONTAL, false);
    mFavCatList = (RecyclerView) 
    view.findViewById(R.id.HomeCatRecyclerOpening);
    mFavCatList.setHasFixedSize(true);
    mFavCatList.setLayoutManager(mLayoutManager2);
    return view;
   }


@Override
public void onStart() {
    super.onStart();
    startListening();

  }


      public void startListening()
    {



    Query query = FirebaseDatabase.getInstance()
            .getReference()
            .child("FavCat")
            .limitToLast(50);
    FirebaseRecyclerOptions<HomeCatitems> options =
            new FirebaseRecyclerOptions.Builder<HomeCatitems>()
                    .setQuery(query, HomeCatitems.class)
                    .build();
    FirebaseRecyclerAdapter adapter = new 
    FirebaseRecyclerAdapter<HomeCatitems, CategoryViewHolder>(options) {
        @Override
        public CategoryViewHolder onCreateViewHolder(ViewGroup parent, int 
    viewType) {              
            View view = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.home_cat_layout, parent, false);
            return new CategoryViewHolder(view);
        }
        @Override
        protected void onBindViewHolder(final CategoryViewHolder holder, int 
     position, final HomeCatitems model) {
            holder.setDisplayName(model.getName());
            holder.setUserImage(model.getImageUrl(), getContext());

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






    Query query1 = FirebaseDatabase.getInstance()
            .getReference()
            .child("FavSubCat")
            .limitToLast(50);

    FirebaseRecyclerOptions<CategoryItems> options1 =
            new FirebaseRecyclerOptions.Builder<CategoryItems>()
                    .setQuery(query1, CategoryItems.class)
                    .build();



    FirebaseRecyclerAdapter adaptersubcat = new 
    FirebaseRecyclerAdapter<CategoryItems, SubCategoryViewHolder>(options1)  
    {
        @Override
        public SubCategoryViewHolder onCreateViewHolder(ViewGroup parent, 
    int viewType) {

            View view = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.home_subcat_items, parent, false);
            return new SubCategoryViewHolder(view);
        }

        @Override
        protected void onBindViewHolder(final SubCategoryViewHolder holder, 
     int position, final CategoryItems model) {

            holder.setDisplayName(model.getName());
            holder.setUserImage(model.getImageUrl(), getContext());


        }
    };
    mFavSubCatList.setAdapter(adaptersubcat);
    adaptersubcat.startListening();
    }

one of the inner viewHolder class is given below public static class SubCategoryViewHolder extends RecyclerView.ViewHolder {

    View mView;
    ImageView subcategoryImageView;
    TextView subcategoryName;

    public SubCategoryViewHolder(View itemView) {
        super(itemView);

        mView = itemView;

    }

    public void setDisplayName(String name){

        subcategoryName = (TextView) 
    mView.findViewById(R.id.home_subcat_name);
        subcategoryName.setText(name);


    }


    public void setUserImage(final String thumb_image, final Context ctx){

        subcategoryImageView = (ImageView) 
   mView.findViewById(R.id.home_subcat_image);
        Picasso.with(ctx).setIndicatorsEnabled(false);

    Picasso.with(ctx).load(thumb_image).networkPolicy(NetworkPolicy.OFFLINE)

    .placeholder(R.drawable.default_avatar).into(subcategoryImageView, new 
    Callback() {
            @Override
            public void onSuccess() {

            }

            @Override
            public void onError() {



 Picasso.with(ctx).load(thumb_image).placeholder(R.drawable.default_avatar)
       .into(subcategoryImageView);

            }
        });

    }



}

Solution

  • After Searching a lot I found that I was using setHasFixedSize(true) with wrap_content of recycler view. I removed the setHasFixedSize(true) and it works perfectly fine now.