如何仅在片段可见时调用 onCreateView?

我正在使用带有 5 个片段的ViewPager,我的问题是当第一个片段可见时,它已经加载了第二个片段。

我读了一些关于viewPager.setOffscreenPageLimit();但默认值是“1”并且不能设置为“0”的东西,因为ViewPager需要这个用于滑动动画。

所以默认情况下总是会加载第二个片段。

但我的问题是我在两个片段中都有一个全局 Arraylist,每个片段中加载了不同的值,当我在片段一上时,这些值被覆盖,因为第二个片段被调用。

当每个片段对用户可见时,如何只为每个片段调用 onCreateView?


慕姐8265434
浏览 115回答 3
3回答

跃然一笑

首先,我不会使用全局列表。如果您需要保存类似类型的列表,请创建一个 baseFragment。如果您的目标是在片段之间共享过滤,那么只需将应用的过滤器传递给每个片段,以便它知道如何在加载或传递列表时管理其列表,但不要使用只是自找麻烦的全局。其次,onCreate 是故意在寻呼机上调用的,因此您可以在它显示在屏幕上之前预加载一些内容。这是为了在用户左右滑动时提高渲染性能。如果你在滑动发生时加载,它会变得很糟糕而且很糟糕。最后考虑将您的逻辑移至 onResume,除非您有充分的理由不这样做。如果这对您不起作用,则监视页面更改事件并调用您在每个 baseFragment 上创建的共享“加载”方法,您可以在那里简单地调用和处理您的代码。

小唯快跑啊

即使您将 setOffscreenPageLimit 设置为 0,View pager 也会加载附近的片段。因为如果该值小于 1,它们会将其设置为 1。所以 onCreate, onCreateView... onResume 附近的片段会在它可见之前被调用。所以只需在setUserVisibleHint中加载您的数据。@Overridepublic 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 调用。

aluckdog

通过使用它,您可以尝试一下,@Override    public void setUserVisibleHint(boolean isVisibleToUser) {}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java