是否可以在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
之类的事情以获得对片段的引用。
答案 0 :(得分: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);
您可以对多个片段重复此操作