【发布时间】:2015-06-29 14:58:00
【问题描述】:
在写这篇文章之前,我已经经历了很多 stackoverflow 问题。我对 Fragment 中的 Backstack 这个家伙感到很困惑。
我在 Activity 内的同一个容器上添加了三个片段
片段 1:
private void addLandingFragment() {
landingPageFragment = LandingPageFragment.newInstance();
FragmentTransaction transaction = manager.beginTransaction();
transaction.add( R.id.container, landingPageFragment, LANDING_PAGE_FRAGMENT_TAG );
transaction.commit();
}
片段 2:
public void addIntrofragment() {
fragment2 = IntroFragment.newInstance();
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace( R.id.container, fragment2, INTRO_PAGE_FRAGMENT_TAG);
transaction.addToBackStack(fragment2.getClass().getName() );
transaction.commit();
}
片段 3:
public void onGetStartedClicked() {
fragment3= ConnectFragment.newInstance();
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace( R.id.container, fragment3,CONNECT_PAGE_FRAGMENT_TAG );
transaction.commit();
}
现在我想要的是当用户按下片段 3 上的返回按钮时,它应该出现在第一个片段上,所以我已经覆盖了 onBackPressed() 方法。
@Override
public void onBackPressed() {
manager.popBackStack(fragment2.getClass().getName() ,FragmentManager.POP_BACK_STACK_INCLUSIVE );
}
但屏幕上什么也没有发生,它使片段 3 保持运行。
更新
当我从
导航时片段1>片段2
然后按下fragment2 上的返回按钮,我将来到fragment1 但如果从
移动片段1 > 片段2> 片段3
我在onBackPressed() 方法上得到堆栈条目计数1,但在设备屏幕上它仍然显示fragment3。现在再次按下后退按钮将使我退出应用程序,但 fragment1 不会出现在屏幕上。如此令人费解的是为什么会这样?
实现这一点的任何解决方案。
【问题讨论】:
-
你试过简单地打电话给
getFragmentManager().popBackStack()吗? -
@tyczj popBackStack 什么都不返回。
-
@joaquin 我试过但没有运气:(
-
@tyczj 我试过用 popBackStackImmediate 它返回 true 但屏幕上没有变化。