Android 将片段实例保存在FragmentPagerAdapter中
在Android 将片段实例保存在FragmentPagerAdapter中,android,android-fragments,fragmentpageradapter,Android,Android Fragments,Fragmentpageradapter,在FragmentPagerAdapter中保留为FragmentPagerAdapter创建的每个片段的实例可以吗 大概是这样的: @Override public Object instantiateItem(ViewGroup container, int position) switch(position){ case 0: fragment0 = super.instantiateItem(container, posit
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
的操作,以获取对片段的引用。这种方法的问题是,FragmentManager
可能会创建片段的新实例,即使您维护了一个引用。在这种情况下,同一片段的多个实例将在内存中(泄漏),并且您维护的引用指向一个甚至可能不会显示的实例。换句话说,这是不安全的
但是,安全的做法是在片段中维护活动的引用
在你的片段中,你覆盖了
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
home = (YourFragmentActivity) activity;
}
public void onCreate(Bundle savedInstanceState) {
home.setThisFragTag(getTag());
}
在你的零碎活动中
public void ThisFragTag(String tag) {
this.fragTag = tag;
}
现在,在活动中,您可以获得当前显示的片段实例
(YourFragmentClass) getSupportFragmentManager().findFragmentByTag(fragTag);
您可以对多个片段重复此操作实际上,我认为使用我的方法,我始终保留对片段管理器管理的片段的实际实例的引用。不过我更喜欢你的建议。谢谢