Android 许多碎片的实例
我有一个关于片段的活动:Android 许多碎片的实例,android,android-fragments,Android,Android Fragments,我有一个关于片段的活动: onCreate() { getSupportFragmentManager().beginTransaction() .add(R.id.container, PostsGaleryFragment.newInstance(), FRAGMENT_TAG).addToBackStack("home") .commit(); } 在用户操作后,我调
onCreate()
{
getSupportFragmentManager().beginTransaction()
.add(R.id.container, PostsGaleryFragment.newInstance(), FRAGMENT_TAG).addToBackStack("home")
.commit();
}
在用户操作后,我调用:
public void onShowPostRequested(ShowPost pShowPost)
{
SinglePostFragment singlePostFragment = SinglePostFragment.newInstance(pShowPost.getPostId());
getSupportFragmentManager().beginTransaction()
.replace(R.id.container, singlePostFragment, FRAGMENT_TAG)
.addToBackStack(null)
.commit();
}
然后可以向后导航到主页:
@Override
public void onBackPressed()
{
FragmentManager supportFragmentManager = getSupportFragmentManager();
if (supportFragmentManager.getBackStackEntryCount() > 0)
{
supportFragmentManager.popBackStack();
} else
{
super.onBackPressed();
}
}
问题:
“home”Fragment
有多个实例。这对我来说并不好,因为这些片段中的每一个都保留了大量对相当大的位图的引用,而且在角落后面还有一个OOM错误
问题:
为什么在.popBackStack()
之后不使用片段的旧实例?
我临时做了一个类似singleton模式的解决方案-目前还可以,但是有什么缺点我应该注意吗?我想你缺少的是检查是否存在保存状态,请尝试以下相同的方法
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, PostsGaleryFragment.newInstance(), FRAGMENT_TAG).addToBackStack("home")
.commit();
}
使用替换而不是添加。或者删除片段onDestroy()使用supportFragmentManager.popbackbackback(“home”);还要检查onCreate上的savedInstanceState===null这是这里的问题之一,但不幸的是不是正确的问题-我正在测试它,没有更改配置,无论如何,谢谢。
onCreate()
{
FragmentManager fm = getSupportFragmentManager();
PostGalleryFragment f = fm.findFragmentByTag(FRAGMENT_TAG);
if(f == null) {
f = fm.beginTransaction().add(R.id.container,
PostsGaleryFragment.newInstance(), FRAGMENT_TAG).commit();
}