检查碎片是否存在并重用它。

9
我正在使用以下代码,每次用户在列表视图中点击一个项目时都会创建一个片段。但是这样的话,每次用户点击都会创建一个新的片段。我希望能够重用旧的片段(如果存在),只重新加载其内容(不创建新的)。
MagazineViewFragment fragment = new MagazineViewFragment();
fragment.openStream(itemSelected);

FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction()
        .replace(R.id.container,  fragment)
        .commit();

我该怎么做?
3个回答

17

有多种方法,可能最简单的一种是检查你的container中当前的片段是否是 FragmentXYZ 的一个实例(在你的情况下是 MagazineViewFragment)。

示例

Fragment mFragment = getFragmentManager().findFragmentById(R.id.container);
if (mFragment instanceof MagazineViewFragment)
    return;

非常感谢!这正是我在寻找的! - Usi Usi

1

在从活动调用片段时添加标记:

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,请查看广播或侦听器。

0

这样的代码可能会有所帮助:

getFragmentManager().findFragmentById(fragmentId);

不要忘记空值检查。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接