【发布时间】:2017-11-10 09:00:52
【问题描述】:
我有三个片段 A、B 和 C
这是路径:A -> B -> C : A 去 B 和 B 去 C
当我从片段 C 回去时,我想去片段 A。
- A C 回到根片段 A
- A B 回到根片段 A
但是我的问题是当我在片段 C 中按下回时,我得到了这种行为:片段 C 似乎没有从后台堆栈中清除:
至于我的代码,这是replaceFragment的方法:
public void replaceFragment(Fragment fragment, boolean withBackStack) {
android.support.v4.app.FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
String fragmentTag = fragment.getClass().getName();
fragmentTransaction.replace(R.id.frame, fragment, fragmentTag);
if (withBackStack)
fragmentTransaction.addToBackStack(fragmentTag);
try {
fragmentTransaction.commitAllowingStateLoss();
} catch (IllegalStateException ex) {
ex.printStackTrace();
}
}
首先我在MainActivity中调用replaceFragment(new AFragment(), false);,然后在Fragment A中,当我点击按钮时,我调用mListener.replaceFragment(new BFragment(), true);
最后,在Fragment B中,当我点击按钮时,我调用了mListener.replaceFragment(new CFragment(), false);
有人对此行为有解释吗?当我点击 backpressed 时,最后一个片段 C 不应该被清除?
Here ,你会找到整个例子。 提前致谢!
【问题讨论】:
-
分享您的 xml 文件。
-
在xml文件中,我只是在fragment中添加了一个简单的textview,在activity中添加了一个frameLayout。无论如何,这是示例的链接:github.com/imen-nmn/BackStackExample
-
我检查了你的代码,我错过了在你的片段 xml 文件中设置背景颜色。这就是它重叠的原因。
-
将背景颜色设置为片段 A、B、C 的父视图,您将永远不会再遇到这个问题
-
添加颜色不会从后台删除片段。您需要为第一个片段调用 add (而不是 replace ),然后对所有其他片段使用 replace 。 OnBack 按使用代码 getFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
标签: android android-fragments fragment-backstack