我有一个viewpager并使用了fragmentpageradapter,现在我有3个片段,在每个片段中我需要发出一个http请求(即点击api), 我不想一次打3个片段的所有api,而是只有当相应的页面是当前项目可见时才需要点击api。
我已经尝试设置offscreenlimit没有帮助,请提出建议
viewPager.setOffscreenLimit(0);
答案 0 :(得分:1)
在片段
中使用此功能private boolean hasBeenVisibleOnce = false;
@Override
public void setUserVisibleHint(boolean visible) {
super.setUserVisibleHint(true);
if (this.isVisible()) {
if (visible && !hasBeenVisibleOnce) {
new NetCheck().execute();
hasBeenVisibleOnce= true;
}
}
}
您可以使用setUserVisibleHint检查片段是否对用户可见。您想添加另一个布尔值(称为hasBeenVisibleOnce)以确定片段是否至少可见一次。这是为了防止多次触发HTTP请求
答案 1 :(得分:0)
使用ViewPager类
提供的OnPageChangeListener可以轻松完成此操作 viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
// communicate with Fragment here
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
首先从片段的 onCreateView 中删除API调用,然后使用此事件侦听器检查选择的页面,根据所选位置,您可以与片段通信以调用所需的API。 / p>