Android 如何在viewpager中高效地进行网络呼叫
我必须在viewpager中的每个页面中进行网络调用 问题在于,viewpager调用具有网络请求的相邻片段的onCreateView()(我使用的是改装),这使得在发出网络请求后改装请求的进度对话框仍然可见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.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);
}
}
});
之后,如果数据是相当新的,则从缓存中获取数据