gpt4 book ai didi

android - 带有 fragmentstatepageradapter 的 Viewpager 不会在前一个 fragment 上调用 ​​oncreateview

转载 作者:行者123 更新时间:2023-11-30 02:05:59 24 4
gpt4 key购买 nike

我的 viewpager 设置了 offscreenpagelimit 1(默认)

当我向右滚动我的 viewpager 时,在当前位置 +1 的 fragment 上调用 ​​oncreateview 以准备下一个 fragment 。

但是当我滑动到第三个 fragment 并返回到第二个 fragment 时,第一个 fragment 的 oncreateview 没有被调用。

为什么 viewpager 会这样,我如何预加载以前的 fragment 如果它们已从内存中删除?

最佳答案

viewPager 的行为是这样的,因为 fragmentStatePagerAdapter 正在保存它的 View 。在第一次运行时,您总是会看到为第 n+1 个 fragment 调用了 onCreateView()。但是如果你已经刷过了所有的 Fragment,它们的 View 已经在 FragmentStatePagerAdapter 中了。当然,由于内存管理原因,PagerAdapter 可能会破坏一些 View (和 Fragment)。

让我们假设发生这种情况: fragment X 被销毁。因此,如果您在 fragment 上滑动,并且您在 fragment Y 上。 fragment X 在您的屏幕外页面限制中。FragmentStatePagerAdapter 会注意到没有可用的 fragment 并将重新创建它。在这种情况下,将再次调用 onCreateView()。

如果你想预加载 Fragment 被销毁之前的状态,那么你需要使用回调 onSaveInstanceState()。

这是一个例子:

保存 fragment 的状态:

@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
Log.v(TAG, "In frag's on save instance state ");
outState.putSerializable("starttime", startTime); //saves the object variable
}

恢复状态:

public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
Log.v(TAG, "In frag's on create view");
View view = inflater.inflate(R.layout.fragment_data_entry, container,
false);
timeTV = (TextView) view.findViewById(R.id.time_tv);
if ((savedInstanceState != null)
&& (savedInstanceState.getSerializable("starttime") != null)) {
startTime = (Calendar) savedInstanceState
.getSerializable("starttime");
}
return view;
}

此代码取自here .您可以在本网站上获得更多相关信息。

关于android - 带有 fragmentstatepageradapter 的 Viewpager 不会在前一个 fragment 上调用 ​​oncreateview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30649267/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com