'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 |
|---|
