gpt4 book ai didi

android - 如何重用 FragmentManager 中的现有 fragment 而不是重新创建它们?

转载 作者:行者123 更新时间:2023-11-29 01:13:57 25 4
gpt4 key购买 nike

我在我的应用程序中使用 NavigationDrawer,抽屉中的每个菜单项都是一个 fragment 。每当用户选择菜单项时,我都会用请求的 fragment 替换主容器中的当前 fragment ,但它每次都会重新创建 fragment ,所以我更新我的代码以重用现有 fragment 而不是一次又一次地创建它们,因为 fragment 的内容保持不变。我更新的显示 fragment 的代码是:

public void showTabFragment() {
TabFragment Tf = (TabFragment) mFragmentManager.findFragmentByTag(Constants.TAB_FRAGMENT);
mFragmentTransaction = mFragmentManager.beginTransaction();
if (Tf != null) {
mFragmentTransaction.replace(R.id.containerView, Tf, Constants.TAB_FRAGMENT);
} else {
mFragmentTransaction.replace(R.id.containerView, new TabFragment(), Constants.TAB_FRAGMENT);
}
mFragmentTransaction.commit();
}

在上面的代码中,我试图通过 Tag 获取 fragment ,但它总是返回 null 并执行其他情况(新 fragment )。有人可以指导我我的代码做错了什么吗?

最佳答案

我猜您显示的代码是针对您的一个菜单 fragment 的?如果是这种情况,可能发生的情况是每次打开菜单项时,容器都会被新 fragment (比如 fragment B)和新标签(比如 TAG 'B')替换。因此,当您尝试使用它的标签 (TAG 'A') 打开前一个 fragment (例如, fragment A)时,它不会在那里,因为那是您替换的内容。

一个可能的解决方案是在创建 fragment 时保留对 fragment 的引用,比如在 HashMap 中,然后重用它们。

private HashMap<String, Fragment> menuFragments = new HashMap<>();
public void showMenu(String fragmentID)
{
MenuFragment fragment = menuFragments.get(fragmentID);
if(fragment == null)
{
fragment = new MenuFragment(); //Create the respective menu fragment based on the ID.
menuFragments.put(fragmentID, fragment);
}

FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.containerView, fragment, fragmentID);
transaction.commit();
}

关于android - 如何重用 FragmentManager 中的现有 fragment 而不是重新创建它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41053265/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com