gpt4 book ai didi

android - 屏幕旋转后使用 ViewPager 缓存 fragment ?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:39:33 24 4
gpt4 key购买 nike

我最初在 Activity onCreate() 中创建我的 fragment 。然后我开始创建 ViewPager 并设置适配器。我保留对 fragment 的全局引用,以便我可以根据需要更新它们。此外,这些 fragment 由适配器访问。

我的问题是,我注意到屏幕旋转后会重新创建 fragment ,但 ViewPager 仍包含创建的原始 fragment ...??

我应该如何处理 fragment 的生命周期?我需要能够直接调用 Activity 中的 fragment 。 fragment 的单例是个好主意吗?或者只是一个内存泄漏者?

protected void onCreate (Bundle savedInstanceState)
{
...
...
// set up cards
mFrag1 = new Frag1();
mFrag1.setOnActionEventListener(mOnActionEvents);

mFrag2 = new Frag2();
mFrag3 = new Frag3();

mFragPager = (ViewPager) findViewById(R.id.vpPager);
mFragAdapter = new FragAdapter(getSupportFragmentManager());
mFragPager.setAdapter(mCardAdapter);
mFragPager.setOnPageChangeListener(mOnCardChange);
}

最佳答案

全局实例和静态 fragment 绝对不是一个好主意。除非您在 fragment 上调用 ​​setRetainInstance(),否则它将被序列化为 Bundle 并在重新创建父 Activity (在屏幕旋转等)时重新创建。当然,这会产生新的 fragment 实例,而您的旧引用将无效。您应该根据需要通过 FragmentManager.findFragmentById/Tag() 获取对 fragment 的引用,绝对不要将它们存储在静态变量中。

您可能需要显示更多我们的代码,但只要您在 onCreate() 中创建 fragment ,引用就应该在 Activity 的生命周期内有效。查看兼容性库示例代码,了解有关将 fragment 与 ViewPager 结合使用的更多信息。

关于android - 屏幕旋转后使用 ViewPager 缓存 fragment ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8204747/

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