gpt4 book ai didi

android - 将 fragment 实例保留在 FragmentPagerAdapter 中

转载 作者:太空宇宙 更新时间:2023-11-03 12:10:13 25 4
gpt4 key购买 nike

是否可以在 FragmentPagerAdapter 中保留为 FragmentPagerAdapter 创建的每个 fragment 的实例?

像这样:

@Override
public Object instantiateItem(ViewGroup container, int position)
switch(position){
case 0:
fragment0 = super.instantiateItem(container, position);
return fragment0;
case 1:
fragment1 = super.instantiateItem(container, position);
return fragment1;
default:
return super.instantiateItem(container, position);
}
}

我会遇到内存问题吗?

我们的想法是做类似 MyFragmentPagerAdapter.fragment0 的事情,以获得对 fragment 的引用。

最佳答案

该方法的问题在于,即使您维护一个引用,FragmentManager 也可能会创建 fragment 的新实例。在那种情况下,同一个 fragment 的多个实例将在内存中(泄漏)并且您维护的引用指向一个甚至可能不会显示的实例。所以换句话说,它是不安全的。

然而,安全的做法是在您的 fragment 中维护对您的 Activity 的引用。

在你的 fragment 中你覆盖

@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
home = (YourFragmentActivity) activity;
}

public void onCreate(Bundle savedInstanceState) {
home.setThisFragTag(getTag());
}

在你的 FragmentActivity

public void ThisFragTag(String tag) {
this.fragTag = tag;
}

现在在您的 Activity 中,您可以获取当前显示的 fragment 实例

(YourFragmentClass) getSupportFragmentManager().findFragmentByTag(fragTag);

您可以对多个 fragment 重复此操作

关于android - 将 fragment 实例保留在 FragmentPagerAdapter 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13685099/

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