2012-12-03 86 views
3

是否可以在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为了得到一个片段的参考。

回答

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); 

显示的片段实例时可以对几个片段重复此操作

+0

实际上,我认为在我的方法中,我始终保持对由fragmentManager管理的片段的实际实例的引用。不过,我更喜欢你的建议。谢谢! –

相关问题