想象一下,我们正在启动应用程序,我们在backstack上添加FragmentA
并根据此代码段(见下文),将片段添加到布局中,因此后面的堆栈或容器
当我进入快速设置时 - >打开飞机模式(我知道它可能没有任何关系,但那是唯一的复制品),当我尝试移动到FragmentB时,我得到了空白屏幕。
基本上,FragmentA仍然在后台,当FragmentB被添加到我从UI分离FragmentA时(frag:remove
是false
),但它仍然在后台。
public static void showFragment(FragmentActivity activity, Fragment f, boolean remove, boolean addToBackStack){
Fragment lastFragment = activity.getSupportFragmentManager().findFragmentById(R.id.content_frame);
FragmentTransaction ft = activity.getSupportFragmentManager().beginTransaction();
if (lastFragment != null) {
if(!remove){
ft.detach(lastFragment);
Log.i("FragmentUtil", "Detaching fragment "+lastFragment.getClass().getSimpleName());
}else{
Log.i("FragmentUtil", "Removing fragment "+lastFragment.getClass().getSimpleName());
ft.remove(lastFragment);
}
}
if (f != null && !f.isAdded() && !f.isDetached()) {
ft.add(R.id.content_frame, f, f.getClass().getName());
Log.i("FragmentUtil", "Adding fragment "+f.getClass().getSimpleName());
if(addToBackStack)
ft.addToBackStack(f.getClass().getName());
} else {
Log.i("FragmentUtil", "Atttaching fragment "+f.getClass().getSimpleName());
ft.attach(f);
}
ft.commit();
}
这两个片段都显示为remove = false
和addToBackStack = true;
TL;DR
:当我显示FragmentA时屏幕变黑并打开飞行模式并尝试添加FragmentB。