3 回答
TA贡献1826条经验 获得超6个赞
首先,我不会使用全局列表。如果您需要保存类似类型的列表,请创建一个 baseFragment。如果您的目标是在片段之间共享过滤,那么只需将应用的过滤器传递给每个片段,以便它知道如何在加载或传递列表时管理其列表,但不要使用只是自找麻烦的全局。
其次,onCreate 是故意在寻呼机上调用的,因此您可以在它显示在屏幕上之前预加载一些内容。这是为了在用户左右滑动时提高渲染性能。如果你在滑动发生时加载,它会变得很糟糕而且很糟糕。
最后考虑将您的逻辑移至 onResume,除非您有充分的理由不这样做。如果这对您不起作用,则监视页面更改事件并调用您在每个 baseFragment 上创建的共享“加载”方法,您可以在那里简单地调用和处理您的代码。
TA贡献1863条经验 获得超2个赞
即使您将 setOffscreenPageLimit 设置为 0,View pager 也会加载附近的片段。因为如果该值小于 1,它们会将其设置为 1。
所以 onCreate, onCreateView... onResume 附近的片段会在它可见之前被调用。
所以只需在setUserVisibleHint中加载您的数据。
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if(getView() != null && isVisibleToUser){
loadData();
}
}
但是存在一个问题。这个方法(setUserVisibleHint)将在我们的片段的 onCreate 之前被调用。
如果您从参数中获取数据.. 我们将从片段的 onCreate 或 onCreateView 获取这些数据。因此,第一个可见片段的 setUserVisibleHint 将被调用,无需加载数据(上述方法中的getView() != null )。为此,我们可以使用
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = super.onCreateView(inflater,container,savedInstanceState);
// This is because for the first fragment to loadData, since the
// setUserVisibleHint is called before the onCreateView of the fragment.
if(getUserVisibleHint()){
loadData();
}
return view;
}
loadData是我的片段的数据绑定部分的方法。
通过这样做,对于第一个可见片段 loadData 将从 onCreateView 调用,而在片段附近,它将从 setUserVisibleHint 调用。
TA贡献1847条经验 获得超7个赞
通过使用它,您可以尝试一下,
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
}
添加回答
举报