why setVisibility in fragment doesn't work?

alosime musaed :

the ProgressBar doesn't disappear in the fragment also items aren't loaded in the RecyclerView, When the code was in the body of onCreate of the main activity ,it was working

I am making fragment that contains ProgressBar and RecyclerView with retrieving data from firebase database , I added setVisibility at the end of onDataChange method so that after getting all the data and store it in the array list , the ProgressBar disappear

RecyclerView offersRecycler;
ArrayList<offer> offers;

OffersAdapter offersAdapter;

View fragment_layout;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    fragment_layout = inflater.inflate(R.layout.fragment_offers, container, false);

    // Offers RecyclerView
            offersRecycler = fragment_layout.findViewById(R.id.offersRecycler);
            offers = new ArrayList();
            offers_init();
            offersAdapter = new OffersAdapter(offers,getContext());
            offersRecycler.setAdapter(offersAdapter);
            offersRecycler.setLayoutManager(new LinearLayoutManager(getContext()));


    // Inflate the layout for this fragment
    return inflater.inflate(R.layout.fragment_offers, container, false);
}


private void offers_init() {
    DatabaseReference db_offers = db_ref().child("offers");

    db_offers.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            try {
                ProgressBar loadingOffers = fragment_layout.findViewById(R.id.loadingOffers);
                loadingOffers.setProgress(10);

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

                    String id = offer_item.getKey();
                    String title = offer_item.child("title").getValue().toString();
                    String rating = offer_item.child("rating").getValue().toString();
                    String orders_number = offer_item.child("orders_number").getValue().toString();

                    offer offer_object = new offer(id,title, rating, orders_number);
                    offers.add(offer_object);

                    offersAdapter.notifyDataSetChanged();
                }

                Toast.makeText(getContext(),"title",Toast.LENGTH_LONG).show();
                loadingOffers.setVisibility(View.GONE);

            }catch (Exception ex){
                Toast.makeText(getContext(),ex.getMessage(),Toast.LENGTH_LONG).show();
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {}
    });



}

I expect the ProgressBar to hide and the array loaded into the RecyclerView

Froyo :
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                     Bundle savedInstanceState) {

fragment_layout = inflater.inflate(R.layout.fragment_offers, container, false);

// Offers RecyclerView
        offersRecycler = fragment_layout.findViewById(R.id.offersRecycler);
        offers = new ArrayList();
        offers_init();
        offersAdapter = new OffersAdapter(offers,getContext());
        offersRecycler.setAdapter(offersAdapter);
        offersRecycler.setLayoutManager(new LinearLayoutManager(getContext()));


// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_offers, container, false);
}

^ This is your code snippet. What you are doing is - inflating a layout fragment_layout = inflater.inflate(R.layout.fragment_offers, container, false) and using fragment_layout to get the instance of RecyclerView. This is fine.

But at the end of the method, you are inflating a new layout and returning that. So the Android framework uses that View instead of fragment_layout to set the Fragment view. All the views in fragment_layout won't be shown since it's never added to the fragment and hence you don't see any changes in the RecyclerView.

At the end of the onCreateView method, you should just return fragment_layout.

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=144998&siteId=1