我有3个片段,Frag_A,Frag_B& Frag_C。
我的导航逻辑是:Frag_A ==> Frag_B ==> Frag_C。那个Frag_A首先被添加到布局中,所以,第一次,Frag_A显示在屏幕上,然后,如果用户按下Next按钮,Frag_A被Frag_B替换,现在Frag_B显示在屏幕上,如果用户按下Next按钮, Frag_B由Frag_C替换,因此Frag_C显示在屏幕上。
此时我的代码一切正常。
更改为下一个片段的方法:
//here, argument 'fragment' is either Frag_B or Frag_C
public void showFragment(Fragment fragment){
FragmentManager fragMgr = activity.getSupportFragmentManager();
FragmentTransaction fragTrans = fragMgr.beginTransaction();
fragTrans.replace(R.id.frag_placeholder, fragment, fragmentName);
fragTrans.addToBackStack(null);
int transId = fragTrans.commit();
fragMgr.executePendingTransactions();
}
活动的布局文件(当Activity启动时,Frag_A被添加到frag_placeholder):
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
>
<FrameLayout
android:id="@+id/frag_placeholder"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
</merge>
但是,在显示Frag_C之后,如果我弹出 Frag_C,请按下物理后退按钮,并在我的代码检测到物理按钮后再调用showFragment(Frag_C)
方法再次显示Frag_C按下,我在屏幕上显示空白页。为什么&amp;如何解决?
=====解释=====================
我上面说过“*在我的代码检测到物理按钮被按下后再次显示Frag_C *”,这就是我的意思:
活动:
@Override
public void onBackPressed() {
super.onBackPressed();
//I detect the Physical Back button is pressed & invoke the method to show the popped Frag_C again.
}
答案 0 :(得分:1)
基于@Luksprog的评论,我发现如果我创建Frag_C
的新实例而不是始终使用相同的实例,则空白页面问题会得到解决。