我在ViewPager
实例中使用的片段非常耗费资源,所以我一次只想加载一个片段。当我尝试以下操作时:
mViewPager.setOffscreenPageLimit(0);
mViewPager.setAdapter(mPagerAdapter);
我的FragmentStatePagerAdapter.getItem(int position)
覆盖函数被调用了3次,这就是我调用mViewPager.setOffscreenPageLimit(1)
时发生的事情。我希望它只被调用一次,因为我指定了0个离屏页面。
我相信我调用所有东西都是正确的,因为如果我调用mViewPager.setOffscreenPageLimit(2)
,FragmentStatePagerAdapter.getItem(int position)
会像我预期的那样被调用5次。
ViewPager是否需要至少1个离屏页面,还是我做错了什么?
发布于 2014-09-05 07:08:36
我找到的最好的方法是setUserVisibleHint
将这个添加到您的片段中
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
// load data here
}else{
// fragment is no longer visible
}
}
发布于 2015-06-20 09:47:04
您可以像这样尝试:
public abstract class LazyFragment extends Fragment {
protected boolean isVisible;
/**
* 在这里实现Fragment数据的缓加载.
* @param isVisibleToUser
*/
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if(getUserVisibleHint()) {
isVisible = true;
onVisible();
} else {
isVisible = false;
onInvisible();
}
}
protected void onVisible(){
lazyLoad();
}
protected abstract void lazyLoad();
protected void onInvisible(){}
protected abstract void lazyLoad();
protected void onInvisible(){}
发布于 2015-09-23 13:30:22
第一次添加
boolean isFragmentLoaded = false;
比
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser && !isFragmentLoaded) {
//Load Your Data Here like.... new GetContacts().execute();
isFragmentLoaded = true;
}
else{
}
}
https://stackoverflow.com/questions/10073214
复制相似问题