gpt4 book ai didi

Android FragmentTransaction.addToBackStack 混淆

转载 作者:IT老高 更新时间:2023-10-28 23:34:17 25 4
gpt4 key购买 nike

我正在研究 Fragments,在区分 FragmentTransaction.replace(id, fragment, tag)FragmentTransaction.addToBackStack(tag) 调用时有点困惑。假设我当前的 fragment 是 FragmentA,然后我加载了 FragmentB。我希望将来,当我需要加载 FragmentA 时,我不必重新加载它。只需加载旧状态的旧版本。我使用了以下代码段:

public void loadFragment(Fragment fragmentB, String tag) {
FragmentManager fm = getSupportFragmentManager();
View fragmentContainer = findViewById(R.id.fragment_container);

FragmentTransaction ft = fm.beginTransaction();
ft.replace(fragmentContainer.getId(), fragmentB, tag);

ft.addToBackStack(tag);

ft.commit();
}

现在我很困惑,我应该在哪里添加字符串标签?在 replace()addToBackStack() 中还是在两个调用中?你能解释一下这两个标签位置的区别吗?

最佳答案

Can you explain the difference between these two tag places?

addToBackStack 的文档很清楚:

An optional name for this back stack state, or null.

而对于 replace :

Optional tag name for the fragment, to later retrieve the fragment with FragmentManager.findFragmentByTag(String).

所以这两个参数是独立的,一个标识back stack,另一个标识Activity的FragmentManager中的fragment。

从这个角度来看,您的代码似乎是正确的,只是我不会通过它的 id 搜索 fragmentContainer View ,而只是使用它的 id 来替换 fragment 。让它更简单:

public void loadFragment(Fragment fragmentB, String tag) {
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.fragment_container, fragmentB, tag);

ft.addToBackStack(null);

ft.commit();
}

如果您以后不需要识别此返回堆栈,请将 null 传递给 addToBackStack。至少我一直在这样做。

关于Android FragmentTransaction.addToBackStack 混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14460109/

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