是否可以在 FragmentPagerAdapter
中保留为 FragmentPagerAdapter
创建的每个 fragment 的实例?
像这样:
@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
的事情,以获得对 fragment 的引用。
最佳答案
该方法的问题在于,即使您维护一个引用,FragmentManager
也可能会创建 fragment 的新实例。在那种情况下,同一个 fragment 的多个实例将在内存中(泄漏)并且您维护的引用指向一个甚至可能不会显示的实例。所以换句话说,它是不安全的。
然而,安全的做法是在您的 fragment 中维护对您的 Activity 的引用。
在你的 fragment 中你覆盖
@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;
}
现在在您的 Activity 中,您可以获取当前显示的 fragment 实例
(YourFragmentClass) getSupportFragmentManager().findFragmentByTag(fragTag);
您可以对多个 fragment 重复此操作
关于android - 将 fragment 实例保留在 FragmentPagerAdapter 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13685099/