每次用户点击列表视图中的项目时,我都会使用以下代码创建一个片段。 但是以这种方式,片段是在每次用户点击时创建的。我想要的是重用旧片段(如果存在)并仅重新加载其内容(不要创建新片段)。
MagazineViewFragment fragment = new MagazineViewFragment();
fragment.openStream(itemSelected);
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.container, fragment)
.commit();
我该怎么办?
答案 0 :(得分:17)
有多种方式,可能最简单的方法是检查container
中的当前片段是否是FragmentXYZ的一个实例(在您的情况下为MagazineViewFragment
)。
Fragment mFragment = getFragmentManager().findFragmentById(R.id.container);
if (mFragment instanceof MagazineViewFragment)
return;
答案 1 :(得分:0)
这样的事情可能有所帮助:
getFragmentManager().findFragmentById(fragmentId);
不要忘记空检查。
答案 2 :(得分:0)
从活动中调用片段时添加标记:
FragmentManager fm = getFragmentManager();
Fragment fragment = fm.findFragmentByTag( MagazineViewFragment.TAG);
if (fragment == null) {
MagazineViewFragment fragment = new MagazineViewFragment();
fragment.openStream(itemSelected);
getFragmentManager()
.beginTransaction()
.add(R.id.container, fragment, MagazineViewFragment.TAG)
.commit();
}
如果您只需要更新itemSelected - 请参阅广播或听众。</ p>