2012-12-03 124 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管理的片段的實際實例的引用。不過,我更喜歡你的建議。謝謝! –

相關問題