我在ViewPager中有3个片段。当我从片段1滑动到3时,片段3刷新数据(重新执行所有方法),但当我从1滑动到2或从2滑动到3时,下一个片段不会刷新数据。在滑动条中刷新片段
你能帮我理解为什么吗?我怎样才能每次都提神醒脑?
我的活动扩展了基类FragmentActivity,片段扩展了基类Fragment。
我在ViewPager中有3个片段。当我从片段1滑动到3时,片段3刷新数据(重新执行所有方法),但当我从1滑动到2或从2滑动到3时,下一个片段不会刷新数据。在滑动条中刷新片段
你能帮我理解为什么吗?我怎样才能每次都提神醒脑?
我的活动扩展了基类FragmentActivity,片段扩展了基类Fragment。
ViewPager在默认情况下使用setOffscreenPageLimit(1)
,这意味着它'缓存'左边的一个视图和右边的另一个视图,所以如果你在第二个片段上并且转到第一个或第三个,它将不会重新加载。如果你回到第一名和第二名,第三名将被重新加载。
setOffscreenPageLimit(0)
产生一个警告(最小值必须是1)。
一个解决方案是加载在碎片中使用setUserVisibleHint
来检测它们何时变得可见,并处理加载/刷新数据。
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
// load data here
}else{
// fragment is no longer visible
}
}
此答案取自this SO answer。
首先在片段结构中,android先前加载了左侧和右侧片段。例如在第二个片段中已经安装了1和2。有这个功能setOffscreenPageLimit。
你的第二个问题:这是可能的,但以一个棘手的方式。我通常为此使用通知适配器。每次刷卡后,您可以使用notifyDataSetChanged();
或将数据重新加载到适配器。