首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >ViewPager.setOffscreenPageLimit(0)未按预期工作

ViewPager.setOffscreenPageLimit(0)未按预期工作
EN

Stack Overflow用户
提问于 2012-04-09 20:32:10
回答 11查看 83.3K关注 0票数 103

我在ViewPager实例中使用的片段非常耗费资源,所以我一次只想加载一个片段。当我尝试以下操作时:

代码语言:javascript
复制
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个离屏页面,还是我做错了什么?

EN

回答 11

Stack Overflow用户

发布于 2014-09-05 07:08:36

我找到的最好的方法是setUserVisibleHint

将这个添加到您的片段中

代码语言:javascript
复制
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (isVisibleToUser) {
        // load data here
    }else{
       // fragment is no longer visible
    }
}
票数 126
EN

Stack Overflow用户

发布于 2015-06-20 09:47:04

您可以像这样尝试:

代码语言:javascript
复制
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(){}

代码语言:javascript
复制
protected abstract void lazyLoad();
protected void onInvisible(){}
票数 8
EN

Stack Overflow用户

发布于 2015-09-23 13:30:22

第一次添加

代码语言:javascript
复制
   boolean isFragmentLoaded = false;

代码语言:javascript
复制
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (isVisibleToUser && !isFragmentLoaded) {
        //Load Your Data Here like.... new GetContacts().execute();

        isFragmentLoaded = true;
    }
else{
     }
}
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10073214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档