3

是否可以保留为 aFragmentPagerAdapter内部创建的每个片段的实例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为了获得对片段的引用。

4

1 回答 1

8

这种方法的问题在于,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);

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

于 2012-12-03T15:18:35.047 回答