'How to set different size in Glide PreloadSizeProvider?

I am using Glide to show images fetch from Firebase to show in RecyclerView in my Android App with the help of Glide PreloadSizeProvider as given in the documentation -

https://muyangmin.github.io/glide/int/recyclerview.html

But my image size is not fixed. The size is stored in a real-time database. So I need to change the PreloadSizeProvider size. But I am unable to do that. My image size comes from the Firebase Realtime Database. So I can only set the PreloadSizeProvider after the data is loaded. How can I set different PreloadSizeProvider?

My current code

public class HomeFragment extends Fragment {

    private DatabaseReference databaseReference;
    private FirebaseUser mUser;

    private final List<InfoModel> infoModelList = new ArrayList<>();
    private InfoAdapter infoAdapter;
 

    public HomeFragment() {}

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view =  inflater.inflate(R.layout.fragment_home, container, false);

        RecyclerView infoRecyclerView = view.findViewById(R.id.frag_home_info_rec_view_id);

        databaseReference = FirebaseDatabase.getInstance().getReference();
        mUser = FirebaseAuth.getInstance().getCurrentUser();

        Point size = new Point();
        WindowManager windowManager = getActivity().getWindowManager();
        windowManager.getDefaultDisplay().getSize(size);
        screenWidth = size.x;
        int screeHeight = size.y;

        ListPreloader.PreloadSizeProvider sizeProvider =  new FixedPreloadSizeProvider(1024, 768);
        ListPreloader.PreloadModelProvider modelProvider = new MyPreloadModelProvider();
        RecyclerViewPreloader<ContactsContract.CommonDataKinds.Photo> preloader =  new RecyclerViewPreloader<>(Glide.with(this), modelProvider, sizeProvider, 10 );

        infoRecyclerView.addOnScrollListener(preloader);


        infoAdapter = new InfoAdapter(getActivity(), infoModelList);
        infoAdapter.setScreenSize(screenWidth, screeHeight);
        infoRecyclerView.setLayoutManager( new LinearLayoutManager(getActivity(), LinearLayoutManager.HORIZONTAL, false));
        infoRecyclerView.setAdapter(infoAdapter);
        infoRecyclerView.setHasFixedSize(false);

        Query infoQuery = databaseReference.child("Data").child("Info").child("Home").child("Info").orderByChild("orderKey");

        infoQuery.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot ds) {

                if(ds.exists()){

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

                        InfoModel infoModel = dataSnapshot.getValue(InfoModel.class);
                        infoModelList.add(infoModel);
                    }

                    infoAdapter.notifyDataSetChanged();

                }

            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });

      

        return view;

    }

  
    /*-------------------------------------------------------------------------------------------*/

    private class MyPreloadModelProvider implements ListPreloader.PreloadModelProvider {

        @NonNull
        @Override
        public List getPreloadItems(int position) {

            String url = infoModelList.get(position).getImageUrl();
            if (TextUtils.isEmpty(url)) {
                return Collections.emptyList();
            }
            return Collections.singletonList(url);

        }

        @Nullable
        @Override
        public RequestBuilder<?> getPreloadRequestBuilder(@NonNull Object item) {
            return  Glide.with(HomeFragment.this).load((String) item) .override(1024, 768);
        }

    }

    /*-------------------------------------------------------------------------------------------*/

}


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source