Android:Dialog Fragment和Backstack问题

Eri*_*man 6 android android-fragments back-stack fragmenttransaction

所以我要说我有以下片段:

Fragment1 Fragment2 DialogFragment Fragment3 Fragment4

让我们说我转到下面的片段,每个fragmetn被添加到后栈:

Fragment1 -> Fragment2 -> DialogFragment -> Fragment3 -> Fragment4
Run Code Online (Sandbox Code Playgroud)

如果我单击BACK按钮,这通常应该转到Fragment3,而是显示DialogFragment.

以下是我使用的片段交易:

Fragment1 - > Fragment2

FragmentTransaction ft = mActivity.getSupportFragmentManager().beginTransaction();
ft.replace(R.id.mainContentHolder, new Fragment2(), "Fragment2");
ft.addToBackStack(null);
ft.commit();
Run Code Online (Sandbox Code Playgroud)

Fragment2 - > DialogFragment

FragmentTransaction ft2 = getFragmentManager().beginTransaction();
ft2.setCustomAnimations(R.anim.flipp_in,R.anim.flipp_static);
ft2.add(R.id.mainContentHolder, new DialogFragment(), "DialogFragment");
ft2.addToBackStack(null);   
ft2.commit();
ft2.hide(Fragment1.this);
Run Code Online (Sandbox Code Playgroud)

DialogFragment - > Fragment3

FragmentTransaction ft = getFragmentManager().beginTransaction(); 
ft.replace(R.id.mainContentHolder, new Fragment3(), "Fragment3");
ft.addToBackStack(null);
ft.commit();
Run Code Online (Sandbox Code Playgroud)

Fragment3 - > Fragment4

FragmentTransaction ft = getFragmentManager().beginTransaction();                                           
ft.replace(R.id.mainContentHolder, new Fragment4(), "Fragment4");
ft.addToBackStack(null);                        
ft.commit();
Run Code Online (Sandbox Code Playgroud)

问题是,当我在Fragment4中并单击BACK按钮时,将显示DialogFragment而不是Fragment3.

小智 0

显示 DialogFragment 时,请使用 Fragments 中 Activity 的片段管理器,以避免从后台堆栈恢复它。