ViewPager项的延迟加载数据

时间:2012-09-17 05:47:01

标签: android android-fragments android-viewpager

我的Fragment包含ViewPager,现在ViewPager包含3个不同的项目,即每个项目(页面)包含ListView,每个列表都有它拥有Adapter,我无法使用FragmentPagerAdapter

ViewPager生活在Fragment

我应该加载ListViews中的所有三个Fragment数据并将其传递给PagerAdapter吗?

2 个答案:

答案 0 :(得分:3)

<xsl:template match="node()|@*">
    <xsl:copy>
        <xsl:apply-templates select="@*|poolColor" />
        <xsl:apply-templates select="node()[name()!='poolColor']" />
    </xsl:copy>
</xsl:template>

然后您可以创建一个客户片段扩展BaseLazyFragment 例如

   public  abstract class BaseLazyFragment extends Fragment {

    protected boolean isVisible;


    /**
     * to judge if is visible to user 
     * @param isVisibleToUser
     */
    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);

        if(getUserVisibleHint()) {
            this.isVisible = true;
            onVisible();
        } else {
            this.isVisible = false;
            onInvisible();
        }

    }


    /**
     * when the  fragment is not visible to user 
     */
    protected void onInvisible() {
        Loggy.e("do  onInvisible");
    }

    /**
     * when the fragment is visible to user 
     * 
     * lazyload
     */
    protected void onVisible() {
        Loggy.e("do  onVisible---");
        lazyLoad();
    }

    protected abstract void lazyLoad();

    }
  

setUserVisibleHint()

第一次当片段创建setUserVisibleHint()方法的头是比onCreateView()时,所以lazyLoad()方法可能抛出NullPointerException,因为oncreateView()没有被调用,所以你应该创建一个标志变量 - &gt ; isPrepared。

  

onCreateView()

reference link

答案 1 :(得分:2)

实际上,这取决于您加载的数据有多大?

如果它很大,请尝试下载ie。每页10个项目,并将该数据传递给适配器并对其进行缓存。之后,实现延迟加载器(如谷歌播放应用程序),下载您的正确页面的下一个项目,而不是所有。

因此,您的所有三个页面都会在第一次加载时显示数据,如果用户需要更多,他可以导航到列表底部,按“加载更多”并获取更多项目:)

根据我的经验,这个解决方案运行正常。当然这种装载机应该采用服务器端。

还有更多的考虑因素,即。也许你的数据“非常活跃”。所以你必须考虑一下。