我的backstack上有fragmentA,屏幕上有fragmentB。我想用fragmentC替换fragmentB,这样当用户按下时,我们回到fragmentA。这就是我用fragmentC
替换fragmentB的方法 final FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.content_container, fragment);
transaction.commitAllowingStateLoss();
这是我处理背压的方式
final FragmentManager fm = getSupportFragmentManager();
if (fm.getBackStackEntryCount() != 0) {
fm.popBackStackImmediate();
} else {
super.onBackPressed();
}
用fragmentC替换fragmentB后,当按下后退按钮时会显示fragmentA,但是屏幕上仍然可以看到fragmentC,这给了我一些非常奇怪的UI。任何人都知道为什么会这样吗?
答案 0 :(得分:0)
将交易添加到Backstack:
final FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.content_container, fragment);
transaction.addToBackStack("")
transaction.commitAllowingStateLoss();
答案 1 :(得分:0)
如果我弄错了,FragmentA会叠加在FragmentC上,因此两个片段都可见。
如果是这种情况,请在xml布局中设置片段A和C的背景。这是一个例子
FragmentA
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tool="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FFF"
android:orientation="vertical">
//Fragment A contents
</LinearLayout>
FragmentC
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tool="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FFF"
android:orientation="vertical">
//Fragment C contents
</LinearLayout>
观察两个片段的rootview中都设置了background属性。因此,虽然它们被覆盖,但一次只能看到一个。