android - 将 fragment 实例保留在 FragmentPagerAdapter 中

标签 android android-fragments fragmentpageradapter

是否可以在 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/

相关文章:

android - 将 MediaPlayer 与 setOnPreparedListener 一起使用

android - 无法通过我的 Android 应用程序访问我的 Google 电子表格

android - 如何禁用操作栏菜单项的长按事件?

Android-API 8 中的 fragment

android - 为多个选项卡返回相同的 fragment

java - 当我从一个 fragment 滑动到另一个 fragment 时如何做一个事件

java - 如何获取Google plus Person的对象类型

java - 无法让按钮与其他代码同时工作

java - 刷新 slider 中的 fragment

android - 如何使用 fragment 使 viewpager 快速转换?