其他分享
首页 > 其他分享> > android – 在FragmentPagerAdapter中保留片段的实例

android – 在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);
        }
    }

我会遇到内存问题吗?

我的想法是做一些像MyFragmentPagerAdapter.fragment0这样的东西,以获得对片段的引用.

解决方法:

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

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

在您的片段中,您覆盖

@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;
}

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

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

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

标签:android,android-fragments,fragmentpageradapter
来源: https://codeday.me/bug/20190725/1536498.html