1

I have to make network calls in every page which is a fragment in viewpager.

The Problem is that the viewpager calls onCreateView() of adjacent fragments having network requests (I am using retrofit) which makes the progress dialog of retrofit request still visible after making the network request.

viewPager.setOffscreenPageLimit(1);

Android allows a min value of 1 in setOffScreenPageLimit.

I also used

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if(isVisible()){
        if(isVisibleToUser){
            Log.d("MyTag","TopFramgnet:My Fragment is visible");
        }else{
            Log.d("MyTag","TopFramgnet:My Fragment is not visible");
        }
    }
}

But this method is not called every time when i switch to the fragment. So, How to make the network calls efficiently?

Second Problem is that how can i reload the fragment so that if i changed something, it can reload its view by making network request again?

Please guide me, I can't find anything that solves my problem.

1 Answers1

0

I think you need enable cache in retrofit. For example

RestAdapter.Builder builder= new RestAdapter.Builder()
   .setRequestInterceptor(new RequestInterceptor() {
        @Override
        public void intercept(RequestFacade request) {
            request.addHeader("Accept", "application/json;versions=1");
            if (MyApplicationUtils.isNetworkAvailable(context)) {
                int maxAge = 60; // read from cache for 1 minute
                request.addHeader("Cache-Control", "public, max-age=" + maxAge);
            } else {
                int maxStale = 60 * 60 * 24 * 28; // tolerate 4-weeks stale
                request.addHeader("Cache-Control", 
                    "public, only-if-cached, max-stale=" + maxStale);
            }
        }
});

Can Retrofit with OKHttp use cache data when offline

After that you get data from cache if data is fairly new.

Community
  • 1
  • 1
mlevytskiy
  • 1,555
  • 2
  • 16
  • 26