Android 如何在viewpager中高效地进行网络呼叫

Android 如何在viewpager中高效地进行网络呼叫,android,android-fragments,android-viewpager,retrofit,Android,Android Fragments,Android Viewpager,Retrofit,我必须在viewpager中的每个页面中进行网络调用 问题在于,viewpager调用具有网络请求的相邻片段的onCreateView()(我使用的是改装),这使得在发出网络请求后改装请求的进度对话框仍然可见 viewPager.setOffscreenPageLimit(1); Android允许setOffScreenPageLimit中的最小值为1 我也用过 @Override public void setUserVisibleHint(boolean isVisibleToUser)

我必须在viewpager中的每个页面中进行网络调用

问题在于,viewpager调用具有网络请求的相邻片段的onCreateView()(我使用的是改装),这使得在发出网络请求后改装请求的进度对话框仍然可见

viewPager.setOffscreenPageLimit(1);
Android允许setOffScreenPageLimit中的最小值为1

我也用过

@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");
        }
    }
}
但是当我切换到片段时,并不是每次都调用这个方法。 那么,如何有效地进行网络呼叫呢

第二个问题是如何重新加载片段,以便如果我更改了某些内容,它可以通过再次发出网络请求来重新加载其视图


请指导我,我找不到任何解决我问题的方法。

我想你需要在改造中启用缓存。比如说

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);
            }
        }
});


之后,如果数据相当新,您将从缓存中获取数据。

我认为您需要在改造中启用缓存。比如说

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);
            }
        }
});

之后,如果数据是相当新的,则从缓存中获取数据