我的Fragment
包含ViewPager
,现在ViewPager
包含3个不同的项目,即每个项目(页面)包含ListView
,每个列表都有它拥有Adapter
,我无法使用FragmentPagerAdapter
ViewPager
生活在Fragment
。
我应该加载ListViews
中的所有三个Fragment
数据并将其传递给PagerAdapter
吗?
答案 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()
答案 1 :(得分:2)
实际上,这取决于您加载的数据有多大?
如果它很大,请尝试下载ie。每页10个项目,并将该数据传递给适配器并对其进行缓存。之后,实现延迟加载器(如谷歌播放应用程序),下载您的正确页面的下一个项目,而不是所有。
因此,您的所有三个页面都会在第一次加载时显示数据,如果用户需要更多,他可以导航到列表底部,按“加载更多”并获取更多项目:)
根据我的经验,这个解决方案运行正常。当然这种装载机应该采用服务器端。
还有更多的考虑因素,即。也许你的数据“非常活跃”。所以你必须考虑一下。