Viewpager延迟加载数据 [英] Viewpager Lazy load data

查看:81
本文介绍了Viewpager延迟加载数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

ViewPager具有公共功能setOffscreenPageLimit( http://developer.android.com/reference/android/support/v4/view/ViewPager.html#setOffscreenPageLimit(int)),这是什么?这是文档中的说明:

设置处于空闲状态的视图层次结构中应保留到当前页面任一侧的页面数.超出此限制的页面将在需要时从适配器重新创建.(我已经对其进行过测试,关于该功能的最小参数为1,尽管我将其设置为0,但它仍为0)

我的演示怎么样

现在,我的演示中包含一个包含6个片段的viewpager.运行时,该viewpager会加载第一个寻呼机和第二个寻呼机,但它只在屏幕上显示第一个寻呼机,当我们移至第二个寻呼机时,它将加载第三个寻呼机.所有这些都很容易理解.

从图片中我们可以知道,当应用程序显示寻呼机1时,寻呼机2已加载,因此我们可以将寻呼机移至寻呼机2,而无需再次将数据加载到寻呼机2上.

当我继续将其移至寻呼机3时,寻呼机1将进入停止状态,而寻呼机4将处于加载状态.

pager1-> pager2-> pager3-> pager4

停止->恢复但不显示->恢复并显示->恢复但不显示

这是显示上面发生的事情的图片!

我需要我的应用程序做什么!

我只希望viewpager加载pager现在显示的数据.例如,当应用首次运行时,它仅初始化pager1并在pager1中加载所需的数据. Pager2将不会加载数据.

这是我的演示: https://github.com/shellshy/LazyViewPager

解决方案

就是这样.

public class FragmentSample extends Fragment{
    ...  
    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if (isVisibleToUser) {
           // load you data
        }
    }
    ...
}

ViewPager has a public function setOffscreenPageLimit (http://developer.android.com/reference/android/support/v4/view/ViewPager.html#setOffscreenPageLimit(int)), What is it? Here is the description from the doc:

Set the number of pages that should be retained to either side of the current page in the view hierarchy in an idle state. Pages beyond this limit will be recreated from the adapter when needed.(I had test it,the min params about the function is 1,althought I set it to 0,It work as well as 0)

How about my demo

Now,my demo contains a viewpager with 6 fragment in it.When it run,the viewpager will load the first pager and the second pager,but it only show the first pager on the screen,When we move to the second pager,It will load the third pager.All these is easy to understand.

From the picture we can know the pager 2 had loaded when the app show pager 1,so we can move pager to pager2 and does no need to load the data on pager 2 again.

When i move it to pager 3 continue,Pager 1 will go into stop status,and pager 4 will be loading.

pager1-> pager2 -> pager3 -> pager4

stop -> resume but not show -> resume and show -> resume but not show

Here is the picture to show what is happend about above!

What I need my app do!

I just want the viewpager load the data which pager is showing now.For example,When the app first run,It only init the pager1 and load what the data need in pager1. Pager2 will not load data.

Here is my demo:https://github.com/shellshy/LazyViewPager

解决方案

Just like this.

public class FragmentSample extends Fragment{
    ...  
    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if (isVisibleToUser) {
           // load you data
        }
    }
    ...
}

这篇关于Viewpager延迟加载数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆