Android 将片段实例保存在FragmentPagerAdapter中

Android 将片段实例保存在FragmentPagerAdapter中,android,android-fragments,fragmentpageradapter,Android,Android Fragments,Fragmentpageradapter,在FragmentPagerAdapter中保留为FragmentPagerAdapter创建的每个片段的实例可以吗 大概是这样的: @Override public Object instantiateItem(ViewGroup container, int position) switch(position){ case 0: fragment0 = super.instantiateItem(container, posit

FragmentPagerAdapter
中保留为
FragmentPagerAdapter
创建的每个片段的实例可以吗

大概是这样的:

@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
的操作,以获取对片段的引用。

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

但是,安全的做法是在片段中维护活动的引用

在你的片段中,你覆盖了

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

public void onCreate(Bundle savedInstanceState) {
            home.setThisFragTag(getTag());
    }
在你的零碎活动中

public void ThisFragTag(String tag) {
    this.fragTag = tag;
}
现在,在活动中,您可以获得当前显示的片段实例

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

您可以对多个片段重复此操作

实际上,我认为使用我的方法,我始终保留对片段管理器管理的片段的实际实例的引用。不过我更喜欢你的建议。谢谢