将片段实例保留在FragmentPagerAdapter中

Héc*_*ena 3 android android-fragments fragmentpageradapter

是否可以保留为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);
        }
    }
Run Code Online (Sandbox Code Playgroud)

我会遇到内存问题吗?

这个想法是MyFragmentPagerAdapter.fragment0为了获得对片段的引用.

zna*_*nat 8

该方法的问题在于FragmentManager即使您维护引用,也可能创建片段的新实例.在这种情况下,同一个片段的几个实例将在内存中(泄漏),并且您维护的引用将以可能甚至不显示的实例为目标.换句话说,它不安全.

然而,安全的是在片段中保持活动的参考.

在您的片段中,您覆盖

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

public void onCreate(Bundle savedInstanceState) {
            home.setThisFragTag(getTag());
    }
Run Code Online (Sandbox Code Playgroud)

在你的FragmentActivity中

public void ThisFragTag(String tag) {
    this.fragTag = tag;
}
Run Code Online (Sandbox Code Playgroud)

现在,在您的活动中,您可以暂停当前显示的片段实例

(YourFragmentClass) getSupportFragmentManager().findFragmentByTag(fragTag);
Run Code Online (Sandbox Code Playgroud)

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